2019-04-16

怎么在BroadcastReceiver(广播)里做耗时操作?

    最近刚好遇到一个耗时操作的问题,因为用到逻辑里面用到了context,不能在Service直接使用,只好在又开启了一个BroadcastReceiver,顺便分享记录一下,希望能够帮到刚好遇到这样问题的人。

     BroadcastReceiver (广播)有两种注册方式,动态注册和静态注册,这里就不详细介绍了,一般我们在BroadcastReceiver里的receiver()里面的逻辑操作超过10s会出现内存溢出,所以我们一般都会开一个服务,把耗时操作交给Service。

    Service是四大组件之一,工作是在主线程里面的,耗时操作一般我们会开一个子线程(new Thread),这里我们没有new Thread,直接使用到的是IntentService。

     它是Service的子类,首先我们自定义MyService,继承IntentService,重写onHandleIntent(),我们可以直接在onHandleIntent()在里面处理耗时操作。

1.当按钮被点击,发送广播

2.然后在自定义的广播接收器中继承BroadcastReceiver,重写onReceive方法,在onReceive方法里面启动service


3.定义一个service,继承IntentService,重写onHandleIntent()方法,在里面发送一个广播,

4.在onReceive里面判断一下action,在里面进行耗时操作处理


5.以下是我在manifests声明的广播和服务


注意:我们在manifest里面的action要和发送广播的action要保持一致

你可能感兴趣的:(2019-04-16)