您的位置:首页 > 移动开发 > Android开发

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也可以,但他们有一点区别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 通信