android中“后台”更新Activity的办法(application handler和BroadcastReceiver)

转自:http://blog.csdn.net/jason0539/article/details/18075293

 

第一种方法:

遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新,没想到传递handler的方法,通过以下方式解决。

1.在MyAPP中定义属性handler

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package  jason.com; 
   
import  jason.com.MasterActivity.MyHandler; 
import  android.app.Application; 
   
/**
* 自己实现Application,实现数据共享
* @author jason
*/ 
public  class  MyAPP  extends  Application { 
// 共享变量 
private  MyHandler handler =  null
   
// set方法 
public  void  setHandler(MyHandler handler) { 
this .handler = handler; 
   
// get方法 
public  MyHandler getHandler() { 
return  handler; 
   

 2、在主activity 中给MyAPP的属性handler赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Override 
public  void  onCreate(Bundle savedInstanceState) { 
   
super .onCreate(savedInstanceState); 
setContentView(R.layout.main); 
   
   
mAPP = (MyAPP) getApplication(); 
handler =  new  MyHandler(); 
tv = (TextView) findViewById(R.id.tv); 
btn_to = (Button) findViewById(R.id.btn_to); 
   
// 设置监听器 
btn_to.setOnClickListener( new  OnClickListener() { 
@Override 
public  void  onClick(View v) { 
// 设置共享变量 
mAPP.setHandler(handler); 
// 启动另一个Activity 
Intent intent =  new  Intent(MasterActivity. this
ToChangeViewActivity. class ); 
startActivity(intent); 
}); 
   

 3、在另一个activity中获取MyAPP中handler进行传值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected  void  onCreate(Bundle savedInstanceState) { 
super .onCreate(savedInstanceState); 
setContentView(R.layout.show); 
   
mAPP = (MyAPP) getApplication(); 
// 获得该共享变量实例 
mHandler = mAPP.getHandler(); 
findViewById(R.id.btn_chang).setOnClickListener( new  OnClickListener() { 
   
@Override 
public  void  onClick(View v) { 
// 发送消息 
mHandler.sendEmptyMessage(CHANGED); 
ToChangeViewActivity. this .finish(); 
}); 
   

 第二种方法:

看到作者的这篇文章不错,就转了过来。两个Activity之间可以通过发送广播来控制另外一个activity的UI更新,比如团购APP里:我下了个订单之后,那么我可以通过发送广播通知“我的订单”里面的内容内容自动更新。

再重复一遍我遇到的问题,就是在MainActivity里面打开AnotherActivity去执行一些操作,相应的改变MainActivity里的一些布局或者执行一些动作,最开始想到的就是把MainActivity的Handler直接传给AnotherActivity,好像不可行,就有了这篇和上一篇文章。

上一篇方案一是通过重写application来在两个activity之间共享Handler的,今天这个方案是通过广播机制解决本来想要通过传递handler来实现的功能,算是Activity之间传递Handler问题的变通方案,

 

其实很简单,就是Broadcast的应用,替换了原来想要通过共享handler解决的思路。

代码如下:

MainActivity:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package  jason.broadcastinsteadofhanlderdemo; 
   
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; 
   
public  class  MainActivity  extends  Activity { 
   
     TextView textView; 
     Button sButton; 
   
     @Override 
     protected  void  onCreate(Bundle savedInstanceState) { 
         super .onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
         textView = (TextView) findViewById(R.id.show); 
         sButton = (Button) findViewById(R.id.startAnother); 
         sButton.setOnClickListener( new  OnClickListener() { 
               
             @Override 
             public  void  onClick(View v) { 
                 // TODO Auto-generated method stub 
                 startActivity( new  Intent(MainActivity. this ,AnotherActivity. class )); 
            
         }); 
         IntentFilter filter =  new  IntentFilter(AnotherActivity.action); 
         registerReceiver(broadcastReceiver, filter); 
    
   
     BroadcastReceiver broadcastReceiver =  new  BroadcastReceiver() { 
   
         @Override 
         public  void  onReceive(Context context, Intent intent) { 
             // TODO Auto-generated method stub 
             textView.setText(intent.getExtras().getString( "data" )); 
        
     }; 
   
     protected  void  onDestroy() { 
         unregisterReceiver(broadcastReceiver); 
     }; 

 AnotherActivity:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package  jason.broadcastinsteadofhanlderdemo; 
   
import  android.app.Activity; 
import  android.content.Intent; 
import  android.os.Bundle; 
import  android.view.View; 
import  android.view.View.OnClickListener; 
import  android.widget.Button; 
   
public  class  AnotherActivity  extends  Activity { 
   
     public  static  final  String action =  "jason.broadcast.action"
   
     Button update; 
   
     @Override 
     protected  void  onCreate(Bundle savedInstanceState) { 
         // TODO Auto-generated method stub 
         super .onCreate(savedInstanceState); 
         setContentView(R.layout.another); 
         update = (Button) findViewById(R.id.updateMain); 
         update.setOnClickListener( new  OnClickListener() { 
   
             @Override 
             public  void  onClick(View v) { 
                 // TODO Auto-generated method stub 
                 Intent intent =  new  Intent(action); 
                 intent.putExtra( "data" "yes i am data" ); 
                 sendBroadcast(intent); 
                 finish(); 
            
         }); 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值