activity和service之间如何进行通信?
2017-02-07 21:22
323 查看
Android的最重要的组件就是Service和Acitivity,那么在使用过程中,我们最常遇到的问题是他们之间的通信问题。
首先Activity调用Service
这个比较基础的,它有两个常见的方法:
第一:通过Intent,这个比较简单了,可以指定package name和class name的方式调用,Intent。setClassName这个成员
即可。通过putString进行数据装载,startService(intent)即可。例子如下:
Intent intent=new Intent("aaa");
intent.putExtra("data","helloData");
startService(intent);
第二:通过IPC,这个比较麻烦,一般用不着,这里不谈
但是,反过来,Service如何将一些状态告诉给Acitivity呢?方法有两种
第一:Service通过广播的形式发送boardcast,我们写一个boardcastReceiver即可。通常的情况下,将
boardcastReceiver写成Activity的内部类,这个onReceiver可以直接调用activity的方法来更新界面。
但是内部类只能采用代码注册的方法registerReceiver(),不能再androidManifest.xml文件中进行静态
的声明,因为内部类要依赖于外部类而存在的,如果一定要用androidManifest。xml来注册receiver,那
么只能把boardcastReceiver写成单独的文件的public类。这时候,你想更新界面就比较麻烦了,你只能
自己把你要更新的acitvity运行起来,然后再向这个activity的内部类发广播的消息来更新界面。
第二:service直接向activity发intent,在service里面进行startActivity,是属于在Activity外
startActivity即在task外启动activity,因此,必须在intent加入一个参数如下:
Intent intentSend=new Intent(Constants.ACTION_STATUS);
intentSend.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentSend.putExtra("status","end");
startActivity(intentSend);
但是此时会引发一个问题,多次startActivity会导致很多的activity实现运行,这肯定不是我们要德,我只要
一个Activity就可,此时,我们要在androidMainfest里面对这个activity的launchMode设置singleInstance
记住啦,有人设置singleTask也可以,但他们有一点区别
首先Activity调用Service
这个比较基础的,它有两个常见的方法:
第一:通过Intent,这个比较简单了,可以指定package name和class name的方式调用,Intent。setClassName这个成员
即可。通过putString进行数据装载,startService(intent)即可。例子如下:
Intent intent=new Intent("aaa");
intent.putExtra("data","helloData");
startService(intent);
第二:通过IPC,这个比较麻烦,一般用不着,这里不谈
但是,反过来,Service如何将一些状态告诉给Acitivity呢?方法有两种
第一:Service通过广播的形式发送boardcast,我们写一个boardcastReceiver即可。通常的情况下,将
boardcastReceiver写成Activity的内部类,这个onReceiver可以直接调用activity的方法来更新界面。
但是内部类只能采用代码注册的方法registerReceiver(),不能再androidManifest.xml文件中进行静态
的声明,因为内部类要依赖于外部类而存在的,如果一定要用androidManifest。xml来注册receiver,那
么只能把boardcastReceiver写成单独的文件的public类。这时候,你想更新界面就比较麻烦了,你只能
自己把你要更新的acitvity运行起来,然后再向这个activity的内部类发广播的消息来更新界面。
第二:service直接向activity发intent,在service里面进行startActivity,是属于在Activity外
startActivity即在task外启动activity,因此,必须在intent加入一个参数如下:
Intent intentSend=new Intent(Constants.ACTION_STATUS);
intentSend.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentSend.putExtra("status","end");
startActivity(intentSend);
但是此时会引发一个问题,多次startActivity会导致很多的activity实现运行,这肯定不是我们要德,我只要
一个Activity就可,此时,我们要在androidMainfest里面对这个activity的launchMode设置singleInstance
记住啦,有人设置singleTask也可以,但他们有一点区别
相关文章推荐
- IActivityManager ,ActivityManagerNative,ActivityManagerService之间如何进行工作
- 使用Messenger进行Activity与Service之间的双向通信
- ------------------------------利用BroadcastReceiver进行Activity和Service之间的通信(留着自己参考用)
- IActivityManager ActivityManagerNative ActivityManagerService之间如何进行工作
- 在Activity和Service之间使用Binder和回调接口进行通信
- activity和service之间的相互通信方法
- android 的Activity和Service之间的通信
- Android中Activity、Service和线程之间的通信
- Activity之间的通信之service
- activity和service之间的相互通信方法
- Activity通过bindService启动Service后Activity和Service之间的通信!
- android 的Activity和Service之间的通信
- Activity与Service通信(不同进程之间)
- Android中Activity,Service,Thread三者之间的通信
- Android如何在Activity和Service之间传递数据
- Activity通过bindService启动Service后Activity和Service之间的通信!
- 多个Android模拟器之间如何进行通信
- Android中Activity、Service和线程之间的通信
- Android Activity和Service之间的通信
- Activity和Service之间的通信