IntentService默认不在主线程中,耗时操作可以在onHandleIntent()做,不会出现线程阻塞的情况。而且省掉了开线程的麻烦。其内部采用了HandleThread实现了异步操作。当onHandleIntent执行完后,会调用stopSelf()停止IntentService。适用于只使用一次的操作。
如果在程序中添加Looper.loop(),生命周期为:无参构造函数 --> onCreate --> onStartCommand --> onHandleIntent.
当再次启动IntentService只调用 onStartCommand() 和 onHandleIntent()。
如果没有添加Looper.loop(),每次启动IntentService,生命周期为:
无参构造函数 --> onCreate -->onStartCommand -->onHandleIntent -->onDestory
代码:
public class LyrIntentService extends IntentService {
public LyrIntentService(String name) {
super(name);
}
public LyrIntentService(){
super("hello");
Log.i("pull", "无参构造");
}
@Override
public void onCreate() {
super.onCreate();
Log.i("pull", "onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("pull", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent intent) {
Log.i("pull", "onHandleIntent");
//
Toast.makeText(getApplicationContext(), "onHandleIntent", 1).show();
Looper.loop();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("pull", "onDestroy");
}
}