首页 > 其他 > 详细

Service Receiver Activity 之间的通信

时间:2014-02-07 20:48:41      阅读:436      评论:0      收藏:0      [点我收藏+]

一.Activity调用Service

1. 通过Intent,例子如下: 

        Intent intent = new Intent(this, Myservice.class); 
//      intent .putExtra(name, value) 
        startService(intent);

 

2. 通过IPC,一般用不着,这里不谈

 

二.Service调用Activity

  1. service 通过广播的形式发送broadcast,我们写一个broadcastReceiver即可,通常的情况,将broadcastReceiver写成Activity的内部类,这个

onReceiver可以直接调用activity的方法来更新界面。但是内部类只能采用代码注册的方法registerReceiver(),不能再AndroidManifest.xml文件

中进行静态的声明,因为内部类要依赖于外部类而存在的。如果你一定要用AndroidManifest来注册receiver,那么只能把broadcastReceiver写成单

独的文件的public类。这时候,你想更新界面就比较麻烦了,你只能自己把你要更新的activity运行起来,然后再向这个activity的内部类发广播的消息

来更新界面

  2. service直接向activity发intent。在service里面进行startActivity是属于在Activity外startActivity即在task外启动activity,因此,必须在intent

加入一个参数如下:

intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);

  

  但是此时会引发的一个问题是,多次startActivity会导致很多的activity实现被运行,这肯定不是我们要的,我只要一个Activity就可,此时,我们要在

androidManifest里面对这个activity的launchMode设置为singleInstance

<activity android:name="com.demo.Activity"
android:label="@string/online" 
android:launchMode
="singleInstance">

 

 记住啦,有人设置为singleTask,也可以,但他们有一点区别。同时记住要更新intent,这样getInstent才可以得到每次的新实例

bubuko.com,布布扣
@Override

protected void onNewIntent (Intent intent){

setIntent(intent);

}
bubuko.com,布布扣

Service Receiver Activity 之间的通信

原文:http://www.cnblogs.com/yuyutianxia/p/3539737.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!