Android 小部件。强制停止后如何恢复进程?
Android Widget. How to restore process after force stop?
在应用程序设置系统菜单中按下 "Force stop" 或在小米 MIUI 中按下 "Close all" 后,我的 android 小部件的进程已停止。和小部件停止更新。只有一种方法可以再次 运行 我的小部件 - 卸载它然后安装。
如何实现android小部件的稳定工作?
我解决了我的问题。
事实证明,当用户在系统菜单中按"Force Stop"或在小米MIUI中按"Clear All"时,小部件的进程不会停止。主线程保持活动状态并继续接收系统消息。
但是引用 AppWidgetManager、RemoteViews 和 ComponentName 的 AppWidgetProvider 的静态字段变为 NULL。
我只是重新创建新对象。
public class AppWidget extends AppWidgetProvider {
public static RemoteViews remoteViews;
public static AppWidgetManager appWidgetManager;
public static ComponentName watchWidget;
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(remoteViews == null)
remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget);
if(appWidgetManager == null)
appWidgetManager = AppWidgetManager.getInstance(context);
if(watchWidget == null)
watchWidget = new ComponentName(context, AppWidget.class);
}
}
在应用程序设置系统菜单中按下 "Force stop" 或在小米 MIUI 中按下 "Close all" 后,我的 android 小部件的进程已停止。和小部件停止更新。只有一种方法可以再次 运行 我的小部件 - 卸载它然后安装。
如何实现android小部件的稳定工作?
我解决了我的问题。 事实证明,当用户在系统菜单中按"Force Stop"或在小米MIUI中按"Clear All"时,小部件的进程不会停止。主线程保持活动状态并继续接收系统消息。 但是引用 AppWidgetManager、RemoteViews 和 ComponentName 的 AppWidgetProvider 的静态字段变为 NULL。 我只是重新创建新对象。
public class AppWidget extends AppWidgetProvider {
public static RemoteViews remoteViews;
public static AppWidgetManager appWidgetManager;
public static ComponentName watchWidget;
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(remoteViews == null)
remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget);
if(appWidgetManager == null)
appWidgetManager = AppWidgetManager.getInstance(context);
if(watchWidget == null)
watchWidget = new ComponentName(context, AppWidget.class);
}
}