service服務(啓動服務)

如果在主線中寫的話會出現
//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服務執行耗時操作要在子線程中執行不能再主線程中執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章