android 静态广播注册的时机点,BroadcastReceiver静态注册与动态注册的小细节

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private static final String ACTION_AUTO_FOR_TEST = "tn.intent.action.AUTO_TEST";

public MyBroadcastReceiver myBroadcastReceiver;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

/**

Begin:动态注册

NOTE:注册和注销广播的时机,最好成对出现。例如:

1)onCreate(Bundle savedInstanceState)注册,在 onDestroy()方法中注销; (区别:即便页面未显示,仍然能接受广播)

2)onResume()注册,在onPause()方法中注销。(区别:即只有页面显示时,才能接受广播)

*/

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction(ACTION_AUTO_FOR_TEST);

myBroadcastReceiver = new MyBroadcastReceiver();

registerReceiver(myBroadcastReceiver, intentFilter);

/**

* END:动态注册

*/

}

@Override

protected void onDestroy() {

super.onDestroy();

/**

* Begin:动态注册广播需要手动注销!

*/

unregisterReceiver(myBroadcastReceiver);

/**

* END:动态注册广播需要手动注销!

*/

}

/**

* 回调Button的点击事件

*/

public void b1Click(View v) {

long timenow = System.currentTimeMillis();

Log.d("SunWinner", "timenow is = " + timenow);

Intent intent = new Intent("tn.intent.action.AUTO_TEST");

intent.setPackage("com.example.myapplication");

intent.putExtra("test1", timenow);

MainActivity.this.sendBroadcast(intent);

}

/**

* 静态注册广播:public static class MyBroadcastReceiver extends BroadcastReceiver {

*/

class MyBroadcastReceiver extends BroadcastReceiver {

/**

* 动态注册内部类广播

*

* 一般写在OnCreate 或者 OnStart等方法里面

*/

@Override

public void onReceive(Context context, Intent intent) {

/**

* Begin:动态注册接收广播方式

*/

long timenow = intent.getLongExtra("test1", -1l);

Toast.makeText(context, "My TimeNOW is " + timenow, Toast.LENGTH_SHORT).show();

/**

* End:动态注册接收广播方式

*/

/**

* Begin:静态注册时接收广播方式

*/

/* String action = intent.getAction();

if (action.equals(ACTION_AUTO_FOR_TEST)) {

long timenow = intent.getLongExtra("test1", -1l);

Toast.makeText(context, "My TimeNOW is " + timenow, Toast.LENGTH_SHORT).show();

}*/

/**

* E:静态注册时接收广播方式

*/

}

}

/**

* 静态注册,且广播做为内部类时需要注意的事项:

*

* 1)清单文件中广播的声明格式为:

* com.example.myapplication.MainActivity$MyBroadcastReceive

* 包名.类名$内部类名

*

* 2)广播类声明时需要加上public static class MyBroadcastReceiver....,否则启动会报错。

*

* 3)静态注册广播时需要在清单文件注册:

*

*

*

*

*/

}

上图的状态为动态注册的方式;静态注册的方式相关代码也在其中,暂被注释.总结:

1)动态注册

注册和注销广播的时机,最好成对出现。例如:

1)onCreate(Bundle savedInstanceState)注册,在 onDestroy()方法中注销; (区别:即便页面未显示,仍然能接受广播)

2)onResume()注册,在onPause()方法中注销。(区别:即只有页面显示时,才能接受广播)

2)静态注册

1)清单文件中广播的声明格式为:

com.example.myapplication.MainActivity$MyBroadcastReceive

包名.类名$内部类名

2)广播类声明时需要加上public static class MyBroadcastReceiver....,否则启动会报错。

(动态注册时不需要特意加public static class也不会报错)

3)静态注册广播时需要在清单文件注册:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值