如果在主線中寫的話會出現
//ANR:application not responsing應用程序未響應
//耗時操作寫到主線程
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//耗時操作
for (int i = 0; i <100 ; i++) {
Log.i("test","i="+i);
SystemClock.sleep(1000);
}
return super.onStartCommand(intent, flags, startId);
}
//解決方案寫個子線程
class MyThread extends Thread{
@Override
public void run() {
super.run();
//耗時操作
for (int i = 0; i <100 ; i++) {
Log.i("test","i="+i);
SystemClock.sleep(1000);
}
}
}
//服務和Thread的區別就是:
古代雙方領兵打仗有將軍和小兵
將軍 就是 服務 將軍在好多時候都是快死了就是死不了總是莫名其妙的有滿血復活了
小兵 就是 Thread 小兵死了就死了 有的時候沒有小兵還不行
明明是是服務執行耗時操作 卻要Thread執行耗時操作
不要Thread還不行
服務就算死了還能活過來
//關閉服務
//停止服務
//當第一個線程執行完畢,則停止服務
//stopSelf();
//所有的線程都執行完畢後,纔會停止服務
stopSelf(startId);
Service和IntentService的區別
IntentService能在主線程中執行耗時操作
裏面有異步任務類
Service服務執行耗時操作要在子線程中執行不能再主線程中執行