私はAndroidを初めて使用しますが、servicesについてはあまり詳しくありません。UIを備えたアクティビティクラスがあります。戻るボタンをクリックすると、このアクティビティクラスをバックグラウンドで実行したいと思います。私の活動をサービスのようにバックグラウンドで実行させる方法、plzは私を助けます。
4 に答える
あなたは本当にActivity
バックグラウンドで実行することはできません!アクティビティがフォアグラウンドにない場合、アクティビティはそれに到達し、システムはメソッドonStop
によってリソースを解放するためにアクティビティを終了できます。アクティビティライフサイクルonDestroy
を参照してください
バックグラウンドで実行するには、Service
またはを作成する必要がありますIntentService
こことここのサービスについてのandroidjavadocをチェックアウトするか、IntentService
これがサードパーティのAndroidサービスチュートリアルです
編集:あなたがそれを乗り越えることができるようにあなたはまたあなたのサービスとあなたの活動の間のコミュニケーションを必要とするかもしれません:例:メッセージングを使った活動とサービスの間のコミュニケーション
アクティビティを逆方向に実行したいだけの場合は、を使用してみてください
moveTaskToBack(true);
終了時にバックグラウンドでアクティビティを実行したいようです。ただし、フォアグラウンドにない限り、アクティビティを実行することはできません。
目的を達成するには、onPause()で、アクティビティの作業を続行するサービスを開始する必要があります。戻るボタンをクリックすると、onPause()が呼び出されます。onPauseで、現在の状態を保存し、ジョブをサービスに転送するだけです。アクティビティがフォアグラウンドでない場合、サービスはバックグラウンドで実行されます。
後でアクティビティに戻ったら、onResume()で何かを実行して、サービスのジョブをアクティビティに再度転送します。
スレッドに関する開発者ガイドを読む必要があります:http://developer.android.com/guide/components/processes-and-threads.html
具体的には、関数doInBackground()ページの例:
public void onClick(View v) {
new DownloadImageTask().execute("http://example.com/image.png");
}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
/** The system calls this to perform work in a worker thread and
* delivers it the parameters given to AsyncTask.execute() */
protected Bitmap doInBackground(String... urls) {
return loadImageFromNetwork(urls[0]);
}
/** The system calls this to perform work in the UI thread and delivers
* the result from doInBackground() */
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
}
}