Android 小部件刷新时是否每个对象都已销毁?
我有这样的小部件:Android 小部件刷新时是否每个对象都已销毁?,android,android-widget,Android,Android Widget,我有这样的小部件: public class WidgetMain extends AppWidgetProvider { public LocationListenerClass locationListener = null; private static final String WIDGET_CLICKED = "widgetClickTest"; @Override public void onEnabled(Context context) { super
public class WidgetMain extends AppWidgetProvider {
public LocationListenerClass locationListener = null;
private static final String WIDGET_CLICKED = "widgetClickTest";
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
Intent intent = new Intent(context,WidgetMain.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
int[] ids = {R.xml.widget_provider};
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
context.sendBroadcast(intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
if(locationListener == null){
Log.d("onUpdate", "locationIsNull=true");
}
Log.d("onUpdate", "isCalled=true");
}
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
if(WIDGET_CLICKED.equals(intent.getAction())){
if(locationListener != null){
locationListener.getSingleUpdate();
}
}
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
locationListener.destroy();
}
}
那么,
当我运行(以及当它收到更新广播)我的应用程序时,我在调试日志中得到locationIsNull=true和isCalled=true,所以我的问题是。对象是否在小部件更新之间被销毁?在应用程序小部件更新之间,您的进程可以并且通常将被终止。新进程将不会有任何来自旧进程的静态数据成员。@zarcel:那么解决方案是什么?@zarcel:摆脱
locationListener
。毕竟,您永远不会给它分配任何内容,因此它总是null
。而且,即使您确实为其分配了一些内容,由于AppWidgetProvider
实例仅用于一个事件(例如,一个onUpdate()
调用),因此拥有数据成员也没有意义。除此之外,由于LocationListenerClass
是您自己的类,我不知道它的作用以及它是否适合AppWidgetProvider
使用。