溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

IntentService如何在Android項(xiàng)目中使用

發(fā)布時(shí)間:2020-11-25 15:47:15 來源:億速云 閱讀:159 作者:Leah 欄目:移動開發(fā)

IntentService如何在Android項(xiàng)目中使用 ?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

Android IntentService詳解

一、IntentService簡介

IntentService是Service的子類,比普通的Service增加了額外的功能。先看Service本身存在兩個(gè)問題: 

  • Service不會專門啟動一條單獨(dú)的進(jìn)程,Service與它所在應(yīng)用位于同一個(gè)進(jìn)程中; 
  • Service也不是專門一條新線程,因此不應(yīng)該在Service中直接處理耗時(shí)的任務(wù);  

二、IntentService特征

  • 會創(chuàng)建獨(dú)立的worker線程來處理所有的Intent請求; 
  • 會創(chuàng)建獨(dú)立的worker線程來處理onHandleIntent()方法實(shí)現(xiàn)的代碼,無需處理多線程問題; 
  • 所有請求處理完成后,IntentService會自動停止,無需調(diào)用stopSelf()方法停止Service; 
  • 為Service的onBind()提供默認(rèn)實(shí)現(xiàn),返回null; 
  • 為Service的onStartCommand提供默認(rèn)實(shí)現(xiàn),將請求Intent添加到隊(duì)列中; 

 三、使用步驟(詳情參考Service項(xiàng)目)

繼承IntentService類,并重寫onHandleIntent()方法即可;

MainActivity.Java文件

public class MainActivity extends Activity {  
  
  @Override  
  protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
  }  
  
  public void startService(View source) {  
    // 創(chuàng)建所需要啟動的Service的Intent  
    Intent intent = new Intent(this, MyService.class);  
    startService(intent);  
  }  
  
  public void startIntentService(View source) {  
    // 創(chuàng)建需要啟動的IntentService的Intent  
    Intent intent = new Intent(this, MyIntentService.class);  
    startService(intent);  
  }  
}  

 MyIntentService.java文件

public class MyIntentService extends IntentService {  
  
  public MyIntentService() {  
    super("MyIntentService");  
  }  
  
  @Override  
  protected void onHandleIntent(Intent intent) {  
    // IntentService會使用單獨(dú)的線程來執(zhí)行該方法的代碼  
    // 該方法內(nèi)執(zhí)行耗時(shí)任務(wù),比如下載文件,此處只是讓線程等待20秒  
    long endTime = System.currentTimeMillis() + 20 * 1000;  
    System.out.println("onStart");  
    while (System.currentTimeMillis() < endTime) {  
      synchronized (this) {  
        try {  
          wait(endTime - System.currentTimeMillis());  
        } catch (InterruptedException e) {  
          e.printStackTrace();  
        }  
      }  
    }  
    System.out.println("----耗時(shí)任務(wù)執(zhí)行完成---");  
  }  
}  
 

MyService.java文件

public class MyService extends Service {  
  
  @Override  
  public IBinder onBind(Intent arg0) {  
    return null;  
  }  
  
  @Override  
  public int onStartCommand(Intent intent, int flags, int startId) {  
    // 該方法內(nèi)執(zhí)行耗時(shí)任務(wù)可能導(dǎo)致ANR(Application Not Responding)異常  
    long endTime = System.currentTimeMillis() + 20 * 1000;  
    System.out.println("onStart");  
    while (System.currentTimeMillis() < endTime) {  
      synchronized (this) {  
        try {  
          wait(endTime - System.currentTimeMillis());  
        } catch (InterruptedException e) {  
          e.printStackTrace();  
        }  
      }  
    }  
    System.out.println("----耗時(shí)任務(wù)執(zhí)行完成---");  
    return START_STICKY;  
  }  
}  

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI