私はAndroidの設計上の考慮事項について言及しています:AsyncTask vs Service(IntentService?)
議論によると、AsyncTaskはアクティビティに緊密に「バインド」されているため、適していません。
そこで、Thread
(AsyncTaskとThreadが同じカテゴリに属していると仮定して)を起動し、無限実行ループを作成して、次のテストを実行しました。
- ホーム画面が表示されるまで、戻るソフトキーを押し続けて、アプリケーションを終了します。スレッドはまだ実行中です。
- [アプリの管理]->[アプリ]->[強制停止]に移動して、アプリケーションを強制終了します。スレッドが停止しています。
ですから、からに変更した後はThread
、Service
アプリを終了または強制Service
終了した後も存続することを期待しています。
Intent intent = new Intent(this, SyncWithCloudService.class);
startService(intent);
public class SyncWithCloudService extends IntentService {
public SyncWithCloudService() {
super("SyncWithCloudService");
}
@Override
protected void onHandleIntent(Intent intent) {
int i = 0;
while (true) {
Log.i("CHEOK", "Service i is " + (i++));
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Log.i("CHEOK", "", ex);
}
}
}
}
// Doesn't matter whether I use "android:process" or not.
<service
android:name="com.xxx.xml.SyncWithCloudService"
android:process=".my_process" >
</service>
しかし、私の発見は、
- ホーム画面が表示されるまで、戻るソフトキーを押し続けて、アプリケーションを終了します。サービスはまだ実行中です。
- [アプリの管理]->[アプリ]->[強制停止]に移動して、アプリケーションを強制終了します。サービスを停止します。
Service
との動作はThread
同じようです。では、なぜService
代わりに使用する必要があるのThread
ですか?見逃したことはありますか?Service
アプリを強制終了した後も、実行を続けると思いましたか?