Service与多个Activity交互
来源:互联网 发布:软件开发教程视频 编辑:程序博客网 时间:2024/05/29 10:56
之前碰到一个需求:
1、打开程序启动一个service,service不停的监听后台的某个数据并向外传递。
2、有多个activity,每个activity都能够通过service向后台发送数据
与后台的交互不说,主要是实现一个service与多个activity的交互。
设计上:
Service向外传递数据使用Broadcast;
Service接受来自Activity的数据使用Intent。
代码实现:
service端,主要实现两个方法。在onCreate里面不停的发送一个自增的值,在onStartCommand里面接受来自Activity的数据,做相关的处理。
@Override public void onCreate() { super.onCreate(); new Thread(){ @Override public void run() { while(autoFlag) { try { /** * 通过广播发送自动增加的num */ intentAuto.putExtra("auto", "" + num); sendBroadcast(intentAuto); num++; sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { String temp = intent.getStringExtra("send"); if(temp!=null && !temp.equals("")){ /** * 将接受到的值加上“Service:“的样式通过广播发送出去 */ intentEdit.putExtra("edit","Service:"+temp); sendBroadcast(intentEdit); } return super.onStartCommand(intent, flags, startId); }
Broadcast端,接受Service传递过来的数据,设置好接口便于Activity调用进行相关的UI更新。
public class MyAutoBroadCastReceiver extends BroadcastReceiver { OnAutoReceiveLinstener onAutoReceiveLinstener; @Override public void onReceive(Context context, Intent intent) { String temp = intent.getStringExtra("auto"); onAutoReceiveLinstener.onReceive(temp); } public interface OnAutoReceiveLinstener{ public void onReceive(String editText); } public void setOnAutoReceiveLinstener(OnAutoReceiveLinstener onAutoReceiveLinstener){ this.onAutoReceiveLinstener = onAutoReceiveLinstener; }}
Activity端,调用Broadcast的接口,获得Service端传递过来的数据,进行相应的UI更新,通过startService方法,向Service传递数据。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); serviceIntent = new Intent(MainActivity.this,MyService.class); startService(serviceIntent); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String temp = edit.getText().toString(); serviceIntent.putExtra("send", temp); startService(serviceIntent); } }); findViewById(R.id.change).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,Activity1.class); startActivity(i); } }); autoBroadCastReceiver = new MyAutoBroadCastReceiver(); IntentFilter autoBroadFilter = new IntentFilter(); autoBroadFilter.addAction("auto"); registerReceiver(autoBroadCastReceiver, autoBroadFilter); autoBroadCastReceiver.setOnAutoReceiveLinstener(new MyAutoBroadCastReceiver.OnAutoReceiveLinstener() { @Override public void onReceive(String editText) { tvAuto.setText(editText); } }); editBroadCastReceiver = new MyEditBroadCastReceiver(); IntentFilter editBroadFilter = new IntentFilter(); editBroadFilter.addAction("edit"); registerReceiver(editBroadCastReceiver, editBroadFilter); editBroadCastReceiver.setOnEditReceiveLinstener(new MyEditBroadCastReceiver.OnEditReceiveLinstener() { @Override public void onReceive(String editText) { tvEdit.append(editText+"\n"); } }); }
在每个Activity中要记得在销毁的时候释放注册的广播。
在程序结束的时候记得关闭Service。
反思及总结:
在Service的生命周期中只能进行一次绑定,如果每个Activity都需要绑定的话只能在每次Activity销毁时关闭Service(onRebind不是很了解)。而在Service的一次生命周期中,onStartCommand是可以多次被调用的。
具体的demo下载:
http://download.csdn.net/detail/zhufeng1222/9057513
0 0
- Service与多个Activity交互
- Activity与Service交互
- service与activity交互实践
- Android Service与Activity交互
- Android Activity与local service的交互
- android service与Activity的交互方式
- Activity与Service之间交互并播放歌曲
- Activity与Service的交互一
- Activity与Service的交互二
- Activity与Service交互(一)
- Activity与Service通过Messenger交互
- Android Service通过Handler与Activity交互
- Service与Activity交互之IPC
- 多个Activity之间的切换与数据交互
- Activity和Service交互
- Android中Service与多个Activity通信
- ANDROID中SERVICE与多个ACTIVITY通信
- Android开发之Service与多个Activity通信
- Struts(4)开发实例
- STL源码剖析 [容器](二)
- Item 16:为什么要使用同样的形式来new和delete Effective C++笔记
- R learning - date and time
- jsp过滤器
- Service与多个Activity交互
- InputStreamReader 和FileReader的区别
- 【解决】SSH问题(四)Java.Lang.ClassNotFoundException: Org.Springframework.Transaction.TransactionException
- cocos2d-X
- 类选择器
- AutoMapper:Missing type map configuration or unsupported mapping
- 2015智能硬件大趋势:用户反向定义产品
- Struts(3)的工作机制及分析
- 记录下如何在原图叠加光流向量