私は、2 つのアクティビティとサービスとレシーバーを含むアプリを持っています。サービスは、常に位置情報の更新を取得するために使用されます。レシーバーで初めてサービスを開始します。私の要件は、停止する必要があることです。アプリケーションがフォアグラウンド (実行中) のときにサービスを開始し、アプリケーションが停止したときにサービスを開始する必要があります。2 つのアクティビティのうち、initActivity はアプリケーションの起動時に起動される最初のアクティビティであり、homegridActivity id は 2 番目のアクティビティです。homegridactivity でアプリケーションを終了するオプションを指定しています。以下は、サービスを開始してサービスを停止するコードです。
class initActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app);
System.out.println("VANDROID service status inside oncreate of init" );
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.vaayoo.android.service.VLocationFetchService".equals(service.service.getClassName())) {
Intent intent = new Intent( VUiHelper.getInstance().getApplicationContext(), VLocationFetchService.class);
boolean result = ((Vandroid)VUiHelper.getInstance().getApplicationContext()).stopService(intent);
System.out.println("VANDROID service status" + result);
manager = null;
}
}
}
} //2 番目のアクティビティ
Class HomeGridActivity extends Activity
{
protected void onDestroy() {
super.onDestroy();
System.out.println("Homegrid activity onDestroy called");
VUiHelper.getInstance().clearControlCache();
ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.vaayoo.android.service.VLocationFetchService".equals(service.service.getClassName())) {
Intent intent = new Intent( VUiHelper.getInstance().getApplicationContext(), VLocationFetchService.class);
ComponentName compname =((Vandroid) VUiHelper.getInstance().getApplicationContext()).startService(intent);
System.out.println("COMPONENT NAME" + compname.toString() );
manager = null;
}
}
}
}
initactivity の oncreate でサービスを停止し、homegridActivity の ondestroy で同じサービスを開始しています。私が直面している問題は、これが初めて機能することです。アプリを複数回閉じて起動すると、サービスが停止しませんそして開始すると、サービスが常に実行されていることがわかりました。私はそのサービスをstart_stickyとして作成したので、いつでもAndroidランタイムによって強制終了されるべきではありません。そのサービスを完全に制御して停止および開始する必要があります。なぜそれが常に機能しないのか、なぜ初めて機能するのかを見つけることができません。私は何を間違っていますか?これをトラブルシューティングする方法は?start_stickyとしてサービスを作っているからでしょうか?