0

我有一个应用程序,它在设备打开时启动。我试图做的是不打开任何活动,而是一个执行某个过程的线程。在接收器类中使用上下文

这里是我的接收机类:

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”与参数“上下文”调用另一个类,那么应用程序不启动。否则,线程正在工作。

这段代码有什么问题?

+0

阅读此:http://developer.android.com/reference/android/content/BroadcastReceiver.html#ReceiverLifecycle – pskink 2014-08-31 16:13:22

+0

“此代码有什么问题?” :很难说,因为你没有告诉我们你的Info,SomeThread或AnotherClass类是什么或他们做了什么。 – Squonk 2014-08-31 16:35:09

回答

0

由于pskink说,我看到了以下注释的文档中:

一旦你的onReceive()返回时,广播接收器不再 活跃,它的宿主进程只是像任何其他一样重要 在其中运行的应用程序组件。

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

然而,再从文档:

这意味着,对于长时间运行的操作,你会经常一起使用 服务与广播接收器,以保持含 过程中积极为您的操作的整个时间。

因此,正如Junior Buckeridge指出的那样,使用Service也可以做更长时间的操作。

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

希望它能帮助。

相关问题