“清除内存” + appWidget崩溃后,服务未重新启动

我建立了一个appWidget,它在他的onEnabled()方法上注册了一些服务。

问题是,在我使用内置的任务管理器的“清除内存/内存”之后,appWidget视图崩溃(所有appWidgets

TextView的文本均设置为默认值(TextView)),并且服务停止运行并且永远不会重启。

仅在设置了小部件一段时间后才会发生这种情况,如果在设置小部件后立即清理内存/内存,则不会发生错误,但是我想这与任务管理器的清理RAM方法有关。

所以最后,我的问题是:有没有办法告诉android系统重新启动这些服务?由于我在市场上下载的其他appWidgets在执行此步骤后似乎仍然可以正常工作。

会很高兴提供想法和解决方案!谢谢高级,Gal :)

我使用的一些代码:

appWidget中的onEnabled()方法:

@Override

public void onEnabled(Context context) {

super.onEnabled(context);

Intent newinIntent = new Intent(context, CallService_1x1.class);

context.startService(newinIntent);

newinIntent = new Intent(context, SmsService_1x1.class);

context.startService(newinIntent);

}

服务之一的某些方法(其他服务非常相似,因为这是其抽象方法):

 @Override

public int onStartCommand(Intent intent, int flags, int startId) {

// We want this service to continue running until it is explicitly

// stopped, so return sticky.

Log.d("SERVICE-SMS","CallMonitorService - onStartCommand created");

return START_STICKY;

}

@Override

public void onCreate() {

super.onCreate();

context = this.getApplicationContext();

Log.d("SERVICE-SMS","CallMonitorService created");

registerObserver();

}

@Override

public void onStart(Intent intent, int startId) {

super.onStart(intent, startId);

}

@Override

public void onDestroy() {

unregisterObserver();

super.onDestroy();

}

@Override

public IBinder onBind(Intent intent) {

return null;

}

/**

* Start the service to process that will run the content observer

*/

public static void beginStartingService(Context context) {

Log.d("SERVICE-SMS","CallMonitorService: beginStartingService()");

context.startService(new Intent(context, CallService.class));

}

/**

* Called back by the service when it has finished processing notifications,

* releasing the wake lock if the service is now stopping.

*/

public static void finishStartingService(Service service) {

Log.d("SERVICE-SMS","CallMonitorService: finishStartingService()");

service.stopSelf();

}

回答:

经过大量研究和尝试,解决了!:)

刚刚添加了BroadcastReciever,用于监听包的更改和更新:

在清单文件中注册接收者:

<receiver android:name=".receivers.onRestartReciever">

<intent-filter>

<action android:name="android.intent.action.PACKAGE_REPLACED" />

<action android:name="android.intent.action.PACKAGE_RESTARTED" />

<data android:scheme="package" android:path="my.Package.Path" />

</intent-filter>

  • PACKAGE_REPLACED-特别是为了通知应用程序更新而调用。
  • PACKAGE_RESTARTED-在大多数内存清洁器正在清洁内存时调用。
  • “数据”行用于监视应用于特定程序包的操作。

在此接收器中,我再次启动服务,然后重新启动小部件视图(在本例中为onUpdate()方法):

public class onRestartReciever extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

Log.d("DEBUG", "onRestartReciever");

// Register Services

MyWidget_1x1.registerServices(context);

MyWidget_2x2.registerServices(context);

// reInitialize appWidgets

AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);

MyWidget_1x1 widget1x1=new CallWidgi();

widget1x1.onUpdate

(context,

AppWidgetManager.getInstance(context),

widget1x1.getIDs(context, appWidgetManager));

MyWidget_2x2 widget2x2=new CallWidgi2();

widget2x1.onUpdate(context,

AppWidgetManager.getInstance(context),

widget2x2.getIDs(context, appWidgetManager));

}

}

registerServices(Context)是我的AppWidgetProvider类(MyWidget_1x1 /

MyWidget_2x2)中的静态方法,用于注册所需的服务。

希望它也会对您有帮助=]

以上是 “清除内存” + appWidget崩溃后,服务未重新启动 的全部内容, 来源链接: utcz.com/qa/401090.html

回到顶部