在Receiver类中使用Context

时间:2014-08-31 16:09:08

标签: java android android-intent broadcastreceiver android-context

我有一个应用程序,它在设备打开时启动。我尝试做的不是打开任何活动,而是打开一些进程的线程。

这是我的接收器类:

public class BOOTReceiver extends BroadcastReceiver {
   Info info = new Info();

   public void onReceive(Context context, Intent intent) {
       assignUserInfo(context);
       SomeThread u = new SomeThread(info);
       u.run();
   }

   private void assignUserInfo(Context ctx) {
       info.setInfo(AnotherClass.getInfo(ctx));
    }
}

如果我致电" assignUserInfo'它使用参数" context"调用另一个类,然后app无法启动。否则,线程正在运行。

此代码有什么问题?

2 个答案:

答案 0 :(得分:1)

我认为你应该使用IntentService来进行线程处理。此外,如果您的应用程序可以唤醒手机,您应该尝试从WakefulBroadcastReceiver扩展您的接收器。 作为附加建议,尽可能尝试使用应用程序上下文

context.getApplicationContext();

以避免内存泄漏。

http://developer.android.com/reference/android/app/IntentService.html http://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html

希望它有所帮助。

答案 1 :(得分:0)

正如pskink所说,我在文档中看到了以下注释:

  

从onReceive()返回后,BroadcastReceiver不再存在   活跃,其托管过程与其他任何一样重要   正在其中运行的应用程序组件。

因此,包含onReceive()函数中的所有进程可以解决我的问题。

然而,再次来自文档:

  

这意味着对于长时间运行的操作,您通常会使用a   与BroadcastReceiver一起服务以保持包含   在整个操作过程中处于活动状态。

因此,正如Junior Buckeridge所说,使用服务也可以做更长时间的操作。