我有主屏幕小部件,它有一个简单的AppWidgetProvider
and JobIntentService
,我可以在其中完成所有工作。
问题是 - 它的工作方式是随机的。有时会,有时不会 - 最奇怪的是,我可以在日志中看到,每个小部件更新enqueueWork
方法JobIntentService
总是被调用,但onHandleWork
方法只是有时。
(我发现与电池优化有很强的相关性,虽然不是 100%。如果我打开“自动管理应用程序”,那么它 99% 可靠地工作。如果打开它,就像抛硬币一样。有时确实如此,有时它不会。最好的说明行为是这个简短的简单视频
这是我的代码(小部件提供者):
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: ");
}
}