android9.0 注册唯一自定义广播的小创意

项目升级到9.0后,静态注册的自定义广播无法接收,需要改为动态注册;此外,接收到开机广播和点击运行APP(被强制停止后再次启动)时都需要注册,需要避免重复注册。
避免重复注册的方法借鉴了单例模式,代码如下:

public static class TaskBroadcast extends BroadcastReceiver {
     private TaskBroadcast()
     {
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(POLL_START_TIMER_BC);
         MyApplication.getContext().registerReceiver(this, intentFilter);
         Log.e(TAG, "TaskBroadcast create");
     }
     private static TaskBroadcast receiver = null;
     private static class innerc{
         static TaskBroadcast receiver = new TaskBroadcast();
     }

     public static void registerTaskBroadCast() {
         Log.w(TAG, "registerTaskBroadCast");
         receiver =  innerc.receiver;
         return;
     }

     public static void unRegisterTaskBroadCast() {
         Log.w(TAG, "unRegisterTaskBroadCast");
         if (receiver != null) {
             MyApplication.getContext().unregisterReceiver(receiver);
         }
     }

     @Override
     public void onReceive(Context context, Intent intent) {
         String action = intent.getAction();
         Log.w(TAG, "taskBroadcast:" + action);
         if (POLL_START_TIMER_BC.equals(action)){
             startPoll(context, null);
         }
     }
 }

内部类innerc的静态变量receiver只会初始化一次,所以构造函数TaskBroadcast()只会执行一次。

你可能感兴趣的:(android)