1
回答
sticky与普通的broadcastReceiver的区别
终于搞明白,存储TCO原来是这样算的>>>   

@xesam 你好,想跟你请教个问题:

我在网上看到的说这两个之间的区别是,sticky可以在发送的时候还没注册,之后注册照样能勾结收到broadcast,而普通的则不能接收到,但是为什么我自己实验的时候确实都可以接受到啊,下面的我的代码。

Button button= (Button) findViewById(R.id.button);

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

IntentFilter f= new IntentFilter();

f.addAction(Keys.ACTION);

registerReceiver(new BroadCastReceiver4(), f);

}

});

Intent intent= new Intent();

intent.setAction(Keys.ACTION);

sendBroadcast(intent);

// sendStickyBroadcast(intent);

<无标签>
举报
找到组织
发帖于4年前 1回/289阅
共有1个答案 最后回答: 4年前

因为你的测试代码有迷惑性,当你第一次测试完StickyBroadcast之后StickyBroadcast会一直驻留在系统内,当你再次测试sendBroadcast,依旧会收到StickyBroadcast,也就是说,你每次看到的都是最初的那个StickyBroadcast。。

如果你想测试的话,应该将普通Broadcast和StickyBroadcast分别设置不同的Action,

示例代码:

public class MainActivity extends Activity {
	private String action_normal = "action_normal";
	private String action_sticky = "action_sticky";
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				IntentFilter f = new IntentFilter();
				f.addAction(action_normal);
				f.addAction(action_sticky);
				registerReceiver(new BroadcastReceiver() {   
				       @Override  
				       public void onReceive(Context context, Intent intent) {   
				           final String action = intent.getAction();   
				           Toast.makeText(context, "action" + action, Toast.LENGTH_SHORT).show();
				       }   
				   }, f);
			}
		});
		sendNormal();
//		sendSticky();
	}
	
	private void sendNormal(){
		Intent intent = new Intent();
		intent.setAction(action_normal);
		sendBroadcast(intent);
	}
	
	private void sendSticky(){
		Intent intent = new Intent();
		intent.setAction(action_sticky);
		sendStickyBroadcast(intent);
	}
}



--- 共有 1 条评论 ---
找到组织奥,对啊,忘记了这点了,等我回去试试去。谢谢啊 4年前 回复
顶部