activityからstartService()で呼び出した常駐サービスが、activityを(アプリ一覧画面からスワイプして)消すと同時に再起動してしまいます。Bindは使っていません。
最小限のソースで試してみましたが同じ現象が起きてしまいます。
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button start_button = (Button)findViewById(R.id.start_button); Button stop_button = (Button)findViewById(R.id.stop_button); final Intent firstIntent = new Intent(getApplication(),Experiment.class); start_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startService(firstIntent); } }); stop_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopService(firstIntent); } }); } }
public class Experiment extends Service { NotificationManagerCompat manager; @Override public void onCreate() { super.onCreate(); Log.d("SERVICE", "onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("SERVICE", "onStartCommand"); NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); builder.setSmallIcon(R.drawable.icon); builder.setContentTitle("TEST"); Notification notification = builder.build(); manager = NotificationManagerCompat.from(getApplicationContext()); manager.notify(0,notification); //return super.onStartCommand(intent, flags, startId); return START_NOT_STICKY; //強制終了後の再起動を防ぐ } @Override public void onDestroy() { Log.d("SERVICE", "onDestroy"); manager.cancel(0); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return null; } }
ログ
D/SERVICE: onCreate D/SERVICE: onStartCommand
上記のソースを実行すると、activityを消した後serviceは通知を消去されませんでした。また、その後serviceが自動で起動することはありませんでした(「設定」アプリから確認)。
・ログに"onDestroy"が出力されていない
・通知が消されていない
・その後自動再起動していない(強制終了のためSTART_NOT_STICKYが効いた?)
の三点から、システムか何かに定義したonDestroyを通さず、強制終了されていると思われます。
この強制終了の原因、そして対策方法の御教授お願いします。
android実機version:5.1.1
開発API:22
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/06 07:09 編集
2016/08/06 09:43