画面が表示されたらいくつかの計算を行い、それらを表示し、画面が消えるとすべてのフィールドをクリアする単純なウィジェットがあります...私のサービスには、ACTION_SCREEN_ONとACTION_SCREEN_OFFをリッスンするブロードキャストレシーバーがセットアップされています。
これは、電話が長時間スリープ状態にならない限り、または電話の使用量が多い限り完全に機能します-これが発生すると、ウィジェットプロセスが強制終了されます(サービスはまだ実行されていますが、プロセスは強制終了されます)これは、ACTION_SCREEN_ON インテントがサービスによってキャッチされないため、画面が消えてウィジェットに戻ったときに更新されません:(
public class CDTservice extends Service {
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
m_receiver = new ScreenBroadcastReceiver();
registerReceiver(m_receiver, filter);
Log.d("Widgettool", "works");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
Toast.makeText(getBaseContext(), "SERVICE ON", Toast.LENGTH_SHORT).show();
return START_REDELIVER_INTENT;
}
@Override
public void onDestroy() {
stop();
unregisterReceiver(m_receiver);
}
public void start()
{
RemoteViews View = new RemoteViews(this.getPackageName(), R.layout.main);
updatewidgetclass x= new updatewidgetclass(this, View, widgetId);
x.start(); // does calculations and displays on widget
}
public void stop()
{
RemoteViews Viewclear = new RemoteViews(this.getPackageName(), R.layout.main);
updatewidgetclass y = new updatewidgetclass(this, Viewclear, widgetId);
y.stop(); // clears resources and stops
}
private class ScreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d("ON SCREEN ON", "might hang here");
start();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
stop();
}
}
}
ウィジェットプロセスがAndroidシステムによって要求されていない場合、ウィジェットは数日間完全に機能し、ACTION_SCREEN_ONの値を完全に表示します
問題は次の場合に発生します-設定>アプリ>実行中を確認します-ウィジェット名が表示され、0プロセスと1サービスと表示されます
メインプロセスでブロードキャスト受信が発生しているため、プロセスが強制終了されたときに受信しないと想定しています。
これについては回避策がありますが、本当に問題を解決したいと考えています。どんな助けでも大歓迎です