Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 小部件刷新时是否每个对象都已销毁?_Android_Android Widget - Fatal编程技术网

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
使用。