- 私は10分ごとにバックグラウンドサービスで1回のAPI呼び出しを行いますが、これはアプリケーションが終了したときと同じように機能しました。
答えて
アラームマネージャAPIを使用する以下のアラームの繰り返しのスケジュールhttps://developer.android.com/training/scheduling/alarms.htmlを参照してください。
あなたの質問は完全に明確ではありません。私は、次はあなたの質問であることを仮定していて、それを答えることを試みる -
「バックグラウンドで実行されるサービスを実行しても継続的にアプリがリモートサーバーに接続するために閉じているときに実行するには?」
これを実現する最善の方法は、JobScheduler APIを使用することです。 JobSchedulerを使用すると、要求をバッチでキューに入れてネットワーク操作を効率的に実行し、バッテリ寿命を節約できます。これにより、ユーザーエクスペリエンスを向上させることができます。
JobScheduler APIを使用するには、JobServiceを作成する必要があります。 JobServiceはServiceまで拡張され、アプリケーションがバックグラウンドであってもシステムがジョブを実行できるようになります。あなたは、次のメソッドを実装する必要があります:ネットワーク要求のような複雑なタスクの場合
onStartJob()
onStopJob()
、(onStartJobにtrueを返す)システムは、背景ネットワークスレッドがまだ実行されていることを知っているとウェイクロックを保持しますネットワークスレッドが終了するまでJobServiceは他のサービスと同様にメインスレッド上で実行され、AsyncTaskのような別のスレッドでネットワーク操作を実行する必要があります。
onStopJob()は、ジョブを実行するジョブ条件が一致しない場合に呼び出されます。ジョブ条件が満たされたときにジョブを自動的に実行/再スケジュールするようにシステムに指示するには、trueを返します。以下は
は、あなたがより良い何が起こっているか理解するためのサンプルコードです -
public class GetImageService extends JobService {
private GetImageTask getImageTask;
@Override
public boolean onStartJob(final JobParameters params) {
getImageTask = new GetImageTask() {
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
jobFinished(params, true);
}
};
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
if (getImageTask != null) {
getImageTask.cancel(true);
}
return false;
}
private class GetImageTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
// todo: connect to remote servers and make a network call here
return null;
}
}
}
JobServiceはサービスであるため、アプリケーションマニフェストファイルでそれを宣言する必要があります。システムがあなたのJobServiceにアクセスできるようにするには、BIND_JOB_SERVICEパーミッションを追加し、exportedをtrueに設定します。
<service
android:name=".activity.GetImageService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"/>
jobschedulerのは、それはあなたがJobInfoオブジェクトを使用して設定することの条件で本当の力だ示しています。 JobSchedulerは、時間とさまざまな条件に基づいて動作します。これにより、AlarmManagerまたはサービスを書いたり、不必要なネットワークコールを行わずに電話バッテリを節約することができます。 network requiredのような条件を設定することができます。これは、JobServiceがネットワーク接続時にのみ実行されることを意味します。条件を永続的に設定すると、電話が再起動してもジョブが実行されます。
JobScheduler jobScheduler = (JobScheduler)
getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(new JobInfo.Builder(1000,
new ComponentName(this, GetImageService.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.build());
schedule()メソッドを呼び出すと、ジョブがシステムによってスケジュールされます。これにより、たとえユーザーがアプリケーションを開いていなくても、すべての条件がバックグラウンドで満たされてもジョブが実行されます。たとえば、これを使用して、ユーザーが要求する前にサーバーからの最新のデータでテーブルを更新することができます。これにより、ユーザーがアプリを開いてデータを待たせることなくデータを利用できるようにすることで、非常に優れたユーザーエクスペリエンスを提供するのに役立ちます。
今年リリースされるAndroid Oでは、background limitsについての読書も検討する必要があります。 Android Oでは、Googleは開発者がJobSchedulerを広く使用することを好みます。
詳細はGoogleによるこのブログ記事を参照してください - またhttps://medium.com/google-developers/scheduling-jobs-like-a-pro-with-jobscheduler-286ef8510129
GitHubの上の例のアプリを開発者がGoogleの - https://github.com/romannurik/muzei/tree/master/main/src/main/java/com/google/android/apps/muzei/sync
- 1. 同じサービスを呼び出すWebサービスとWebアプリケーションを呼び出すWin-app
- 2. アプリケーションがバックグラウンドから呼び出されたときにメソッドを呼び出す
- 3. .NETで作成したWindowsサービスを呼び出す方法は?
- 4. 複数の独立したjquery ajax呼び出しを並列で呼び出し、関数がすべて終了したときに呼び出す方法
- 5. Webサービスの呼び出しアプリケーションが
- 6. Ajax呼び出しとWebサービスAPI呼び出しの相違点
- 7. wso2 esbの呼び出しメディエーターを使用してWebサービスを呼び出すことはできますか?
- 8. Androidサービスonstart()呼び出し側アクティビティのonCreate()が終了した後にのみ呼び出される
- 9. retrofitサービスobservableを呼び出してonErrorを呼び出す方法は?
- 10. WCFサービスの呼び出し方法
- 11. サービスからの非同期呼び出しが完了したときにのみ関数を呼び出す方法はありますか?
- 12. Windowsサービスでのメソッド呼び出しの呼び出し
- 13. Watson翻訳サービスを呼び出そうとしています
- 14. スウィフトプレイグラウンドで曲が終了したときに関数を呼び出す方法
- 15. シェルスクリプトの呼び出しと終了
- 16. Application.Run()が呼び出される前に終了(終了)とアプリケーションが呼び出されていますか?
- 17. asp.netアプリケーションがWebサービスを呼び出す
- 18. APIゲートウェイを使用してWebサービスを呼び出す方法
- 19. クライアント側から.NET Remoting非同期サービス呼び出しを終了します。
- 20. Web API呼び出しWebサービス
- 21. WCFサービスの呼び出しごと
- 22. サービスでタイマーを呼び出す方法
- 23. ADSF Webアプリケーション呼び出しWebサービス
- 24. Geofenceを終了したときにメソッドを呼び出す
- 25. pyqtでQfiledialogを呼び出すとプログラムが終了します
- 26. Azure:サービスAPI呼び出しを認証する方法
- 27. WF4呼び出しWCFサービス
- 28. WFサービス呼び出しシーケンスプロブラム
- 29. Webサービス呼び出しHTTPS
- 30. ajax呼び出しが終了した後の呼び出し関数