我有一个应用程序,它在设备打开时启动。我尝试做的不是打开任何活动,而是打开一些进程的线程。
这是我的接收器类:
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无法启动。否则,线程正在运行。
此代码有什么问题?
答案 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所说,使用服务也可以做更长时间的操作。