0

アクティビティから開始済みサービスを作成しました。興味があります: アクティビティが破棄されるとどうなりますか? サービスはまだ実行されていますか? (走ると思います!)

次に、アクティビティが再作成されたときに、そのサービスと通信する方法はありますか? サービスがまだ実行されているかどうかを知る必要があるだけです。実行されている場合は、アクティビティの参照をサービスに渡したいと思います。

4

1 に答える 1

1

わかりました、コメントは十分に大きくありません。サービスを開始するために使用するコードを次に示します。開始サービスに続くのは、サービスが実行されているかどうかを判断するために使用する関数です。クラス DownloadDatabase は IntentService を拡張します。このサービスは、外部で作成された 70 メガバイトの SQLite データベースを Android にダウンロードします。

 Intent intentService = new Intent(this, DownloadDatabase.class);
 startService(intentService);

次の関数は、サービスが既に実行されているかどうかを確認します。が実行されていない場合に他の検証を行う他のルーチンから呼び出すため、関数としてコーディングされています。

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

マニフェストには次の権限も必要です。

 uses-permission android:name="android.permission.GET_TASKS"

isMyServiceRunning 関数で何が起こっているかは次のとおりです。

  1. アクティビティ マネージャーを取得します。
  2. 現在実行中のタスクのリストが取得され、特殊なケースの for ループの引数として使用されます。
  3. 各タスクがリストから取得されると、タスク名がダウンロード サービスの完全修飾クラス名と比較されます。
  4. 一致が見つかった場合、関数は true を返します。それ以外の場合は false を返します。

したがって、あなたの質問への答えとして、はい、それを開始するタスクから実行されているかどうかを確認できます。タスクを終了して再度開始しても。が別のアクティビティまたはアプリから実行されているかどうかを確認することもできます。

注: このコードは 2.x との互換性のために書かれています。バージョン 3 以降でダウンロードを行う場合は、独自のダウンロード サービスを作成する代わりに、ダウンロード マネージャーを使用してください。

于 2012-07-21T22:13:06.373 に答える