0

私は、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としてサービスを作っているからでしょうか?

4

1 に答える 1

3

このメソッドは true または false を返します。サービスが実行されている場合は true を返し、それ以外の場合は false を返します。したがって、このように使用するときにこのメソッドを使用できます。

private boolean isMyServiceRunning() {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (RunningServiceInfo service : manager
                .getRunningServices(Integer.MAX_VALUE)) {
            if ("packagename".equals(service.service
                    .getClassName())) {
                return true;
            }
        }
        return false;
    }

とそのように確認します。

if (isMyServiceRunning()) {
    stopService(new Intent(A.this, MusicService.class));

    } 
于 2012-11-05T06:49:04.987 に答える