activity和service之间如何进行通信?
来源:互联网 发布:sky 知乎live 编辑:程序博客网 时间:2024/06/10 16:15
Android的最重要的组件就是Service和Acitivity,那么在使用过程中,我们最常遇到的问题是他们之间的通信问题。
首先Activity调用Service
这个比较基础的,它有两个常见的方法:
第一:通过Intent,这个比较简单了,可以指定package name和class name的方式调用,Intent。setClassName这个成员
即可。通过putString进行数据装载,startService(intent)即可。例子如下:
<service android:name="com.exampleone.service.LocalService">
<intent-filter>
<action android:name="aaa"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
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
<Activity android:name="com.demo.Activity" android:launchMode="singleInstance">
</Activity>
记住啦,有人设置singleTask也可以,但他们有一点区别
- activity和service之间如何进行通信?
- activity和service之间如何进行通信?
- Android Activity和Service之间的通信
- Android Activity和Service之间的通信
- Activity和Service之间的通信
- Android Activity和Service之间的通信
- Service和Activity之间的通信
- Android Activity和Service之间的通信
- service和activity之间的通信
- Service和Activity之间的通信
- service和Activity之间的通信
- 在Activity和Service之间使用Binder和回调接口进行通信
- Activity和Service 使用Binder进行通信
- ------------------------------利用BroadcastReceiver进行Activity和Service之间的通信(留着自己参考用)
- Fragment和Activity之间进行通信
- Activity与Service之间通信
- Activity与Service之间通信
- Service与Activity进行通信
- Use Direct NFS for Data Files
- 如何更有效地学习开源项目的代码?
- android raw读取超过1M文件的方法
- Cassandra、MongoDB、CouchDB、Redis、Riak、HBase比较
- 简单分析一下socket中的bind
- activity和service之间如何进行通信?
- 随机数扩展函数
- 四大类手机游戏的未来机会
- 托福词汇: List 6
- 点滴
- android的四大组件解析
- Android中Cursor类的概念和用法
- 使程序在启动时不创建一个新文档
- 使WebDev.WebServer.exe 当web服务器