AndroidのIntentServiceとServiceの違いを知るために、以下のようにIntentServiceクラスの小さなテストを作成しました。 IntentServiceクラスは、 startService(intent);
を使用して開始することができ、結果としてnStartCommand(Intent intent、int flags、int startId)が呼び出されます。また、例えばMainActivity にIntentServiceクラスから値を送信するために、我々はsendBroadcast(intent);
経由で送信する必要があり、それは私がこれまでサービスとIntentServiceの違い
sendBroadcast(intent);
を経由して送信された値を受け取ることができるようにMainActivityは、そのアクションのbroadcastReceiverを登録する必要がありますサービスとIntentServiceの相違を見ることはできません!!彼らはそれらを開始する方法とデータをブロードキャストする方法で似ているので、あなたは でそれらがどのような文脈で教えてくれますか?要するに
public class MyIntentService extends IntentService {
private final String TAG = this.getClass().getSimpleName();
public final static String INTENT_ACTION = "ACTION_VALUE_SENT";
public final static String INTENT_KEY = "INTENT_KEY";
public MyIntentService() {
super(null);
}
/**
* Creates an IntentService. Invoked by your subclass's constructor.
*
* @param name Used to name the worker thread, important only for debugging.
*/
public MyIntentService(String name) {
super(name);
setIntentRedelivery(true);
}
@Override
public void onCreate() {
super.onCreate();
Log.w(TAG, SubTag.msg("onCreate"));
}
@Override
protected void onHandleIntent(Intent intent) {
Log.w(TAG, SubTag.msg("onHandleIntent"));
int intent_value = intent.getIntExtra("intent_key", -1);
Log.i(TAG, SubTag.bullet("", "intent_value: " + intent_value));
Intent intent2 = new Intent();
intent2.setAction(MyIntentService.INTENT_ACTION);
intent2.putExtra(MyIntentService.INTENT_KEY, intent_value);
sendBroadcast(intent2);
SystemClock.sleep(3000);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.w(TAG, SubTag.msg("onStartCommand"));
return super.onStartCommand(intent, flags, startId);
}
主な違いを参照してください。そして、IntentServiceはバックグラウンドスレッドで作業しています – xAqweRx