アクティビティの呼び出しからサービスを開始および停止していますstartSertice()/stopService()
(ユーザーがチェック ボックスを選択/選択解除し、サービスが制限されていない場合)。サービスを開始するアクティビティが閉じられていても、すべてが正常に機能しています。「実行中のアプリ」では、1 つのプロセス、1 つのサービスが実行されていることがわかります。しかし、Task manager
ある種のアプリケーションを使用してアプリケーションを強制終了すると、プロセスが強制終了され、実行中のアプリが表示されてもサービスが機能しません0 processes, 1 service
。このような状況でサービスを機能させるにはどうすればよいですか? 0 processes, 1 service
サービスが正常に動作している間、Avast with のような他のいくつかのセキュリティ アプリケーションでも同じことが観察されました。これについて私を助けてください。
以下は、クリック時のアクティビティです。
@Override
public void onClick(View arg0) {
boolean value = checkBox.isChecked();
if(value){
// start the service
startService(new Intent(this, MyService.class));
Toast.makeText(this, "Background service started", Toast.LENGTH_SHORT).show();
} else {
stopService(new Intent(this, MyService.class));
Toast.makeText(this, "Background service stopped", Toast.LENGTH_SHORT).show();
}
}
サービスクラスは次のとおりです。
public class MyService extends Service{
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate(){
super.onCreate();
Log.d("@@@@@@Service","Service created successfully");
}
@Override
public int onStartCommand(Intent intent, int flags, int stardId){
Log.d("@@@@@@Service","Service started successfully");
IntentFilter powerButtonIntentFilter = new IntentFilter();
powerButtonIntentFilter.addAction("android.intent.action.SCREEN_ON");
this.registerReceiver(pbReceiver, powerButtonIntentFilter);
Log.d("#######","Power button register registered");
return START_STICKY;
}
@Override
public void onDestroy(){
Log.d("@@@@@@Service","Service destroyed successfully");
this.unregisterReceiver(pbReceiver);
Log.d("#######","Power button register un-registered");
super.onDestroy();
}
}
理想的なケースでは、すべてが正常に機能しています。サービスを開始するアクティビティが閉じられている場合でも、SCREEN ON アクションはブロードキャスト レシーバによって適切にリッスンされています。設定で実行中のアプリを確認できます。しかし、タスク マネージャーの種類のアプリケーションを使用してプロセスを強制終了すると、プロセスが強制終了され、実行中のアプリで 0 プロセス、1 サービスが実行されていることがわかります。タスクマネージャーからアプリを強制終了した後にサービスが実行されていますが、ブロードキャストレシーバーは SCREEN ON アクションをリッスンしていません。これについて私を助けてください。
ありがとう、JK