【发布时间】:2020-11-16 13:37:44
【问题描述】:
我有一个主屏幕小部件,它有一个简单的AppWidgetProvider 和JobIntentService,我可以在其中完成所有工作。
问题是 - 它的工作方式有点随机。有时会,有时不会 - 最奇怪的是,我可以在日志中看到,在每个小部件更新时,JobIntentService 的 enqueueWork 方法总是被调用,但 onHandleWork 方法只是有时被调用。
(我发现与电池优化有很强的相关性,但不是 100%。如果我打开“自动管理应用程序”,那么它 99% 的工作可靠。如果打开,就像抛硬币一样。有时会,有时不会。Best to ilustrate behavior would be this short simple video
这是我的代码(小部件提供者):
public class MyWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.v("aaa", "onUpdate");
// super.onUpdate(context, appWidgetManager, appWidgetIds);
// update in my own Service (to avoid ANR)
Intent intent = new Intent(context, MyJobIntentService.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
MyJobIntentService.enqueueWork(context, intent);
}
@Override
public void onReceive(Context context, Intent intent) {
Log.v("aaa", "onReceive");
super.onReceive(context, intent);
}
}
这是我做所有工作的服务 (JobIntentService):
public class MyJobIntentService extends JobIntentService {
public static final int JOB_ID = 1;
public static void enqueueWork(Context context, Intent work) {
Log.v("aaa", "enqueueWork: ");
enqueueWork(context, MyJobIntentService .class, JOB_ID, work);
}
@Override
protected void onHandleWork(Intent intent) {
Log.v("aaa", "onHandleWork: ");
}
}
【问题讨论】:
-
enqueueWork(context, UpdateServiceCalendar.class, JOB_ID, work);它应该是 enqueueWork(context, MyJobIntentService.class, JOB_ID, work);?
-
显然这只是一个错字,当我重命名课程时。抱歉,我更正了它
-
我有完全相同的设置和类似的问题...:/
-
经典的谷歌——他们打破了自己的安卓标准,他们自己的文档,显然不能正常工作。令人难以置信的是,这家公司有多蹩脚,这可能是我在他们的 API 中发现的第 100 个错误。不要让我从制造商开始,这个网站总结得很好 - 长话短说,他们也打破了安卓标准:dontkillmyapp.com/
标签: android android-widget appwidgetprovider jobintentservice