进入设置,清除应用的数据后,widget的内容不再更新,查找原因,发现清除数据后会杀死应用所有的服务,详细的过程可参考:http://blog.youkuaiyun.com/Gaugamela/article/details/78595857这篇文章介绍了清除数据后,执行的所有的操作。
解决办法:
1. 在manifest中,Application下添加android:persistent="true"项目,测试发现服务还是未启动,
2. 静态注册一个广播(Android7.0)
首先需要判断widget的是否存在,才可以开启widget数据刷新服务
判断widget的是否存在,不能把数据存放在sp里面,要存可以存放在SystemProperties
还有一种方法是直接通过AppWidgetManager查询是否被添加在widget:
mWidgetManager = AppWidgetManager.getInstance(this);
//packageName为应用的包名
//widgetProviderName为应用注册的widgetprovider类名
int[] list= mWidgetManager.getAppWidgetIds(new ComponentName(packageName,widgetProviderName));
if (list.length>0) {
//开启服务
startService();
}
注:由于系统对于这样的广播还没有,目前使用的是定制的广播,回到widget就会发送广播。如果仅仅是app不是系统应用很难做到这一点,因此对于这种情况,清除应用数据后,可能会造成一些异常。