アクティビティから開始済みサービスを作成しました。興味があります: アクティビティが破棄されるとどうなりますか? サービスはまだ実行されていますか? (走ると思います!)
次に、アクティビティが再作成されたときに、そのサービスと通信する方法はありますか? サービスがまだ実行されているかどうかを知る必要があるだけです。実行されている場合は、アクティビティの参照をサービスに渡したいと思います。
アクティビティから開始済みサービスを作成しました。興味があります: アクティビティが破棄されるとどうなりますか? サービスはまだ実行されていますか? (走ると思います!)
次に、アクティビティが再作成されたときに、そのサービスと通信する方法はありますか? サービスがまだ実行されているかどうかを知る必要があるだけです。実行されている場合は、アクティビティの参照をサービスに渡したいと思います。
わかりました、コメントは十分に大きくありません。サービスを開始するために使用するコードを次に示します。開始サービスに続くのは、サービスが実行されているかどうかを判断するために使用する関数です。クラス 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 関数で何が起こっているかは次のとおりです。
したがって、あなたの質問への答えとして、はい、それを開始するタスクから実行されているかどうかを確認できます。タスクを終了して再度開始しても。が別のアクティビティまたはアプリから実行されているかどうかを確認することもできます。
注: このコードは 2.x との互換性のために書かれています。バージョン 3 以降でダウンロードを行う場合は、独自のダウンロード サービスを作成する代わりに、ダウンロード マネージャーを使用してください。