
在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识。
我们都知道,一个Activity 可以启动另一个Activity,即使这个Activity是定义在别一个应用程序里的,比如说,想要给用户展示一个地图的信息,现在已经有一个Activity可以做这件事情,那么现在你的Activity需要做的就是将请求信息放进一个Intent对象里,并且将这个Intent对象传递给startActivity(),那么地图就可显示出来了,但用户按下Back键之后,你的Activity又重新出现在屏幕上。
对用户来讲,显示地图的Activity和你的Activity好像在一个应用程序中的,虽然是他们是定义在其他的应用程序中并且运行在那个应有进程中。Android将你的Activity和借用的那个Activity被放进一个Task中以维持用户的体验。那么Task是以栈的形式组织起来一组相互关联的Activity,栈中底部的Activity就是开辟这个Task的,通常是用户在应用程序启动器中选择的Activity。栈的顶部的Activity是当前正在运行的Activity--用户正在交互 *** 作的Activity。
当一个Activity启动另一个Activity时,新启动的Activity被压进栈中,成为正在运行的Activity。旧的Activity仍然在栈中。当用户按下BACK键之后,正在运行的Activityd出栈,旧的Activity恢复成为运行的Activity。栈中包含对象,因此如果一个任务中开启了同一个Activity子类的的多个对象——例如,多个地图浏览器——则栈对每一个实例都有一个单独的入口。栈中的Activity不会被重新排序,只会被、d出。Task是一组Activity实例组成的栈,不是在manifest文件里的某个类或是元素,所以无法设定一个Task的属性而不管它的Activity,一个Task的所有属性值是在底部的Activity里设置的,这就需要用于Affinity。关于Affinity这里不再详述,大家可以查询文档。
一个Task里的所有Activity作为一个整体运转。整个Task(整个Activity堆栈)可以被推到前台或被推到后台。假设一个正在运行的Task中有四个Activity——正在运行的Activity下面有三个Activity,这时用户按下HOME键,回到应有程序启动器然后运行新的应用程序(实际上是运行了一个新的Task),那么当前的Task就退到了后台,新开启的应用程序的root Activity此时就显示出来了,一段时间后,用户又回到应用程序器,又重新选择了之前的那个应用程序(先前的那个Task),那么先前的那个Task此时又回到了前台了,当用户按下BACK键时,屏幕不是显示刚刚离开的那个新开启的那个应用程序的Activity,而是被除回到前台的那个Task的栈顶Activity,将这个Task的下一个Activity显示出来。 上述便是Activity和Task一般的行为,但是这个行为的几乎所有方面都是可以修改的。Activity和Task的关系,以及Task中Activity的行为,是受启动该Activity的Intent对象的标识和在manifest文件中的Activity的元素的属性共同影响的。
以上是关于Activity和Task的描述。
在开发Android项目时,用户难免会进行程序切换,在切换过程中,程序将进入后台运行,需要用时再通过任务管理器或是重新点击程序或是通过点击信息通知栏中的图标返回原来的界面。这种效果类似于腾讯QQ的效果,打开QQ后显示主界面,在使用其他的程序时,QQ将以图标的形式显示在信息通知栏里,如果再用到QQ时再点击信息通知栏中的图标显示QQ主界面。
方法一:轮询
比如主线程要等子线程在得到变量“val”值的时候开始用“val”的值来进行工作,这个比较简单。
方法二,回调
回调就是调用别的对象的方法时把“自己”传进去,然后别的对象在某个时候调用“自己的方法”
public interface ThreadCallback {void threadStartLisener();
void threadEndLisener();
}public class SubRunnable implements Runnable {
private ThreadCallback mThreadCallback;
public SubRunnable(ThreadCallback threadCallback){
thismThreadCallback = threadCallback;
}
@Override
public void run() {
mThreadCallbackthreadStartLisener();
for(int i=0;i<5;i++){
Systemoutprintln(ThreadcurrentThread()getName() + " do something "+i);
}
mThreadCallbackthreadEndLisener();
}
}public class ThreadCallbackTest implements ThreadCallback{
private static ThreadCallbackTest mThreadCallbackTest = new ThreadCallbackTest();
public static void main(String[] args) {
Systemoutprintln(ThreadcurrentThread()getName() + " 开始");
new Thread(new SubRunnable(mThreadCallbackTest))start();
}
@Override
public void threadStartLisener() {
Systemoutprintln(ThreadcurrentThread()getName() + " 线程,知道SubRunnable线程开始执行任务了");
}
@Override
public void threadEndLisener() {
Systemoutprintln(ThreadcurrentThread()getName() + " 线程,知道SubRunnable线程任务执行结束了");
}
}
在android系统中,那些被监听对象有哪些:1、单击事件(ViewOnClickListener):当用户触碰到某个组件或者方向键被按下时产生该事件,该事件的处理方法是onClick()。
2、焦点事件(ViewOnFocusChangeListener):组件得到或者失去焦点时产生该事件,事件处理方法是onFocusChange()。
3、按键事件(ViewOnKey Listener):用户按下或者释放设备上的某个按键时产生,事件处理方法是 onKey()。
4、触碰事件(ViewOnTouchListener):设备具有触摸屏功能时,触碰屏幕产生该事件。事件处理方法是onTouch()。
5、创建上下文菜单事件(ViewOnCreateContextMenu Listener):创建上下文菜单时产生该事件,事件处理方法是 onCreateContextMenu()。
在你的APP启动时候发送一个notification通知,或者启动一个服务。
如果开启,是会有提示的,没有自然就没有,在OnCreate方法里面启动。
如果你是要监听到启动做些什么事的话,可以考虑启动服务,向你要的另一个程序发送值。
安装自启动: 要做这个功能有一个前提,那就是用户的机器上已经装过相应应用,也就是说只有升级APK的时候才可以这么干,因为要执行的功能需要程序的配合。具体步骤如下: 首先要知道程序已经安装完成,所以需要在程序中注册一个广播监听(必须是静态的,你懂的)apk安装完成的action:"androidintentactionPACKAGE_ADDED",在这个广播的onReceive方法中监听action,并通过intentgetDataString()方法判断安装程序的包名是否属于自己的包名,如果是做下一步 *** 作;通过Intent显式或者隐式的启动你自己的程序。建议: 最好不要这样干,你要考虑一下用户的感受,特别是那种自动安装不需要点确认的时候,正在玩游戏、看视频、看小说、用微信你自动打开一个应用开机自启动 android实现开机自启动可能是移动 *** 作系统中最简单的了,只需要监听一个开机启动的Broadcast(广播)即可。首先写一个Receiver(即广播监听器),继承BroadcastReceiver。如下所示: public class BootReceiver extends BroadcastReceiver { private PendingIntent mAlarmSender; @Override public void onReceive(Context context, Intent intent) { // 在这里干你想干的事(启动一个Service,Activity等),本例是启动一个定时调度程序,每30分钟启动一个Service去更新数据 mAlarmSender = PendingIntentgetService(context, 0, new Intent(context, RefreshDataServiceclass), 0); long firstTime = SystemClockelapsedRealtime(); AlarmManager am = (AlarmManager) context getSystemService(ActivityALARM_SERVICE); amcancel(mAlarmSender); amsetRepeating(AlarmManagerELAPSED_REALTIME_WAKEUP, firstTime, 30 60 1000, mAlarmSender); } } 接下来,只需要在应用程序配置文件AndroidManifestxml中注册这个Receiver来监听系统启动事件即可如下所示: <receiver android:name="serviceBootReceiver"> <intent-filter> <!-- 系统启动完成后会调用--> <action android:name="androidintentactionBOOT_COMPLETED"> </action> </intent-filter> </receiver>
以上就是关于如何在安卓桌面的应用图标上添加监听事件全部的内容,包括:如何在安卓桌面的应用图标上添加监听事件、Android 如何监听一个线程的开始和结束、在android系统中,那些被监听对象有哪些等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)