Service通过广播Broadcast更新Activity UI
来源:互联网 发布:mac系统剪切 编辑:程序博客网 时间:2024/05/18 22:09
原文地址::http://www.pocketdigi.com/20110303/197.html
今天学习到Service,在用Service下载文件时,一个问题就是Service没有界面,如何通知用户当前下载的进度,Service直接向Activity传数据有点麻烦,于是想到了用Broadcast,Service广播,Activity负责接收,再对接收到的数据进行处理,就达到了我们的目的。下面是今天这个程序的运行效果:
先注册Receiver,然后开始Service,上面的TextView和ProgressBar就会随着Service传过来的值变,解除注册Receiver或者结束Service后不会再变。
Service代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
package com.services; import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log; public class TestService extends Service {boolean isStop=false;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubLog.i("TAG","绑定");return null;}public void onCreate(){Log.i("TAG","Services onCreate");super.onCreate();}public void onStart(Intent intent,int startId){Log.i("TAG","Services onStart");super.onStart(intent, startId);new Thread(){//新建线程,每隔1秒发送一次广播,同时把i放进intent传出public void run(){int i=0;while(!isStop){Intent intent=new Intent();intent.putExtra("i", i);i++;intent.setAction("android.intent.action.test");//action与接收器相同sendBroadcast(intent);Log.i("TAG",String.valueOf(i));try {sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}.start(); }@Overridepublic void onDestroy() {Log.i("TAG","Services onDestory");isStop=true;//即使service销毁线程也不会停止,所以这里通过设置isStop来停止线程super.onDestroy();} }
Activity代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
package com.services; import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView; public class main extends Activity {/** Called when the activity is first created. */Button b1,b2,b3,b4;TestService mService;ProgressBar pb;MyReceiver receiver;TextView tv;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);b1=(Button)findViewById(R.id.b1);b2=(Button)findViewById(R.id.b2);b3=(Button)findViewById(R.id.b3);b4=(Button)findViewById(R.id.b4);b1.setOnClickListener(l1);b2.setOnClickListener(l2);b3.setOnClickListener(l3);b4.setOnClickListener(l4);pb=(ProgressBar)findViewById(R.id.pb);tv=(TextView)findViewById(R.id.tv);} public class MyReceiver extends BroadcastReceiver {//自定义一个广播接收器@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubSystem.out.println("OnReceiver");Bundle bundle=intent.getExtras();int a=bundle.getInt("i");pb.setProgress(a);tv.setText(String.valueOf(a));//处理接收到的内容 }public MyReceiver(){System.out.println("MyReceiver");//构造函数,做一些初始化工作,本例中无任何作用} } OnClickListener l1=new OnClickListener(){ @Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartService(new Intent(main.this, TestService.class));//开始服务} };OnClickListener l2=new OnClickListener(){ @Overridepublic void onClick(View v) {// TODO Auto-generated method stubstopService(new Intent(main.this, TestService.class));//结束服务} };OnClickListener l3=new OnClickListener(){ @Overridepublic void onClick(View v) {// TODO Auto-generated method stub//注册接收器receiver=new MyReceiver();IntentFilter filter=new IntentFilter();filter.addAction("android.intent.action.test");main.this.registerReceiver(receiver,filter);} };OnClickListener l4=new OnClickListener(){ @Overridepublic void onClick(View v) {// TODO Auto-generated method stubmain.this.unregisterReceiver(receiver);//解除注册接收器} };}
- Service通过广播Broadcast更新Activity UI
- Service通过广播Broadcast更新Activity UI
- Service通过广播Broadcast更新Activity UI
- Service通过广播Broadcast更新Activity UI
- Service通过Broadcast更新UI
- Service通过Broadcast更新UI
- 后台Service通过广播更新UI,Activity通过广播停止Service
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- 【Android】Service通过广播更新UI
- 【Android】Service通过广播更新UI
- Broadcast与service----------通过广播启动服务
- Android Service与Activity之间通信:通过Binder对象、Broadcast广播
- Android Service与Activity之间通信:通过Binder对象、Broadcast广播
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- VC做的DLL工程只生成DLL,不生成LIB
- java中的静态方法不能被继承
- SQL Server2005 还原数据库
- dsp CCS4.2 初次使用 调试 简介
- CSS 布局小技巧
- Service通过广播Broadcast更新Activity UI
- .net页面定时刷新的几种简单方式
- 微软等面试100题(1-40)
- 函数式编程另类指南 (zz)
- Enemies and Combat: How to Create a Tile Based Game with Cocos2D Part 3
- lib 与 obj 文件的关系
- string的size
- 如何从硬盘驱动器检索已删除的历史记录
- java.net.UrlConnection类的使用