[Android实例] Service和广播联合更新UI的例子
2013-08-08 13:26
447 查看
原文地址:[Android实例] Service和广播联合更新UI的例子作者:上官飞儿
在Android中,异步更新UI,通常我们会选用Handler启动线程,或者sendMessage的方式,那么利用Service和广播也可以更新UI的,例子如下:
我们建立一个Service:
package com.andy
import android.app.Service;//引入相关包
import android.content.BroadcastReceiver;//引入相关包
import android.content.Context;//引入相关包
import android.content.Intent;//引入相关包
import android.content.IntentFilter;//引入相关包
import android.os.IBinder;//引入相关包
//继承自Service的子类
public class MyService extends Service{
CommandReceiver cmdReceiver;
boolean flag;
@Override
public void onCreate(){//重写onCreate方法
flag = true;
cmdReceiver = newCommandReceiver();
super.onCreate();
}
@Override
public IBinder onBind(Intent intent){//重写onBind方法
// TODO Auto-generated methodstub
return null;
}
@Override
public int onStartCommand(Intent intent, intflags, int startId) {//重写onStartCommand方法
IntentFilter filter = newIntentFilter();//创建IntentFilter对象
filter.addAction("wyf.wpf.MyService");
registerReceiver(cmdReceiver,filter);//注册Broadcast Receiver
doJob();//调用方法启动线程
returnsuper.onStartCommand(intent, flags, startId);
}
//方法:
public void doJob(){
newThread(){
publicvoid run(){
while(flag){
try{//睡眠一段时间
Thread.sleep(1000);
}
catch(Exceptione){
e.printStackTrace();
}
Intent intent =
newIntent();//创建Intent对象
intent.setAction("wyf.wpf.Sample_3_6");
intent.putExtra("data",Math.random());
sendBroadcast(intent);//发送广播
}
}
}.start();
}
private class CommandReceiver extendsBroadcastReceiver{//继承自BroadcastReceiver的子类
@Override
public void onReceive(Contextcontext, Intent intent) {//重写onReceive方法
int cmd =intent.getIntExtra("cmd", -1);//获取Extra信息
if(cmd ==Sample_3_6.CMD_STOP_SERVICE){//如果发来的消息是停止服务
flag = false;//停止线程
stopSelf();//停止服务
}
}
}
@Override
public void onDestroy(){//重写onDestroy方法
this.unregisterReceiver(cmdReceiver);//取消注册的CommandReceiver
super.onDestroy();
}
}
建立一个activity
package com.andy;//声明包语句
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.TextView;//引入相关包
//继承自Activity的子类
public class Sample_3_6 extends Activity {
public static final int CMD_STOP_SERVICE =0;
ButtonbtnStart;//开始服务Button对象应用
Button btnStop;//停止服务Button对象应用
TextView tv;//TextView对象应用
DataReceiverdataReceiver;//BroadcastReceiver对象
@Override
public void onCreate(BundlesavedInstanceState) {//重写onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//设置显示的屏幕
btnStart =(Button)findViewById(R.id.btnStart);
btnStop =(Button)findViewById(R.id.btnStop);
tv =(TextView)findViewById(R.id.tv);
btnStart.setOnClickListener(newOnClickListener() {//为按钮添加点击事件监听
@Override
publicvoid onClick(View v) {//重写onClick方法
Intent myIntent = new Intent(Sample_3_6.this,wyf.wpf.MyService.class);
Sample_3_6.this.startService(myIntent);//发送Intent启动Service
}
});
btnStop.setOnClickListener(newOnClickListener() {//为按钮添加点击事件监听
@Override
publicvoid onClick(View v) {//重写onClick方法
Intent myIntent = newIntent();//创建Intent对象
myIntent.setAction("wyf.wpf.MyService");
myIntent.putExtra("cmd",CMD_STOP_SERVICE);
sendBroadcast(myIntent);//发送广播
}
});
}
private class DataReceiver extendsBroadcastReceiver{//继承自BroadcastReceiver的子类
@Override
public void onReceive(Contextcontext, Intent intent) {//重写onReceive方法
doubledata = intent.getDoubleExtra("data", 0);
tv.setText("Service的数据为:"+data);
}
}
@Override
protected void onStart(){//重写onStart方法
dataReceiver = newDataReceiver();
IntentFilter filter = newIntentFilter();//创建IntentFilter对象
filter.addAction("wyf.wpf.Sample_3_6");
registerReceiver(dataReceiver, filter);//注册BroadcastReceiver
super.onStart();
}
@Override
protected void onStop(){//重写onStop方法
unregisterReceiver(dataReceiver);//取消注册BroadcastReceiver
super.onStop();
}
}
转自: http://www.eoeandroid.com/thread-45221-1-1.html
在Android中,异步更新UI,通常我们会选用Handler启动线程,或者sendMessage的方式,那么利用Service和广播也可以更新UI的,例子如下:
我们建立一个Service:
package com.andy
import android.app.Service;//引入相关包
import android.content.BroadcastReceiver;//引入相关包
import android.content.Context;//引入相关包
import android.content.Intent;//引入相关包
import android.content.IntentFilter;//引入相关包
import android.os.IBinder;//引入相关包
//继承自Service的子类
public class MyService extends Service{
CommandReceiver cmdReceiver;
boolean flag;
@Override
public void onCreate(){//重写onCreate方法
flag = true;
cmdReceiver = newCommandReceiver();
super.onCreate();
}
@Override
public IBinder onBind(Intent intent){//重写onBind方法
// TODO Auto-generated methodstub
return null;
}
@Override
public int onStartCommand(Intent intent, intflags, int startId) {//重写onStartCommand方法
IntentFilter filter = newIntentFilter();//创建IntentFilter对象
filter.addAction("wyf.wpf.MyService");
registerReceiver(cmdReceiver,filter);//注册Broadcast Receiver
doJob();//调用方法启动线程
returnsuper.onStartCommand(intent, flags, startId);
}
//方法:
public void doJob(){
newThread(){
publicvoid run(){
while(flag){
try{//睡眠一段时间
Thread.sleep(1000);
}
catch(Exceptione){
e.printStackTrace();
}
Intent intent =
newIntent();//创建Intent对象
intent.setAction("wyf.wpf.Sample_3_6");
intent.putExtra("data",Math.random());
sendBroadcast(intent);//发送广播
}
}
}.start();
}
private class CommandReceiver extendsBroadcastReceiver{//继承自BroadcastReceiver的子类
@Override
public void onReceive(Contextcontext, Intent intent) {//重写onReceive方法
int cmd =intent.getIntExtra("cmd", -1);//获取Extra信息
if(cmd ==Sample_3_6.CMD_STOP_SERVICE){//如果发来的消息是停止服务
flag = false;//停止线程
stopSelf();//停止服务
}
}
}
@Override
public void onDestroy(){//重写onDestroy方法
this.unregisterReceiver(cmdReceiver);//取消注册的CommandReceiver
super.onDestroy();
}
}
建立一个activity
package com.andy;//声明包语句
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.TextView;//引入相关包
//继承自Activity的子类
public class Sample_3_6 extends Activity {
public static final int CMD_STOP_SERVICE =0;
ButtonbtnStart;//开始服务Button对象应用
Button btnStop;//停止服务Button对象应用
TextView tv;//TextView对象应用
DataReceiverdataReceiver;//BroadcastReceiver对象
@Override
public void onCreate(BundlesavedInstanceState) {//重写onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//设置显示的屏幕
btnStart =(Button)findViewById(R.id.btnStart);
btnStop =(Button)findViewById(R.id.btnStop);
tv =(TextView)findViewById(R.id.tv);
btnStart.setOnClickListener(newOnClickListener() {//为按钮添加点击事件监听
@Override
publicvoid onClick(View v) {//重写onClick方法
Intent myIntent = new Intent(Sample_3_6.this,wyf.wpf.MyService.class);
Sample_3_6.this.startService(myIntent);//发送Intent启动Service
}
});
btnStop.setOnClickListener(newOnClickListener() {//为按钮添加点击事件监听
@Override
publicvoid onClick(View v) {//重写onClick方法
Intent myIntent = newIntent();//创建Intent对象
myIntent.setAction("wyf.wpf.MyService");
myIntent.putExtra("cmd",CMD_STOP_SERVICE);
sendBroadcast(myIntent);//发送广播
}
});
}
private class DataReceiver extendsBroadcastReceiver{//继承自BroadcastReceiver的子类
@Override
public void onReceive(Contextcontext, Intent intent) {//重写onReceive方法
doubledata = intent.getDoubleExtra("data", 0);
tv.setText("Service的数据为:"+data);
}
}
@Override
protected void onStart(){//重写onStart方法
dataReceiver = newDataReceiver();
IntentFilter filter = newIntentFilter();//创建IntentFilter对象
filter.addAction("wyf.wpf.Sample_3_6");
registerReceiver(dataReceiver, filter);//注册BroadcastReceiver
super.onStart();
}
@Override
protected void onStop(){//重写onStop方法
unregisterReceiver(dataReceiver);//取消注册BroadcastReceiver
super.onStop();
}
}
转自: http://www.eoeandroid.com/thread-45221-1-1.html
相关文章推荐
- [Android实例] Service和广播联合更新UI的例子
- Android实例] Service和广播联合更新UI的例子
- Service和广播联合更新UI的例子
- [Android] Service和广播联合更新UI
- Service和广播联合更新UI的例子
- Service和广播联合更新UI的例子
- 【Android】Service通过广播更新UI
- android客户端用bindservice来动态更新UI数据的实例
- 【Android应用实例之四】计时器之通过Service&BroadcastReceiver实现UI动态更新
- 【Android】Service通过广播更新UI
- android之后台定时更新ui天气【Timer、service、broadcast、activity】
- Android异步更新UI-线程池-Future-Handler实例分析
- android之在activity中控制另一个activity的UI更新_如何在activity之间传递handler&利用broadcast广播机制
- Android开发之UI更新交互机制与实例解析
- Android Service更新UI的方法之Messenger
- 有关Android中Service实现UI更新
- android学习之通过handler更新UI的例子
- Android 异步更新UI-线程池-Future-Handler实例分析
- 后台Service通过广播更新UI,Activity通过广播停止Service
- Android Service——在子线程中更新UI