編輯:關於Android編程
一、IntentService簡介
IntentService是Service的子類,比普通的Service增加了額外的功能。先看Service本身存在兩個問題:
Service不會專門啟動一條單獨的進程,Service與它所在應用位於同一個進程中;
Service也不是專門一條新線程,因此不應該在Service中直接處理耗時的任務;
二、IntentService特征
會創建獨立的worker線程來處理所有的Intent請求;
會創建獨立的worker線程來處理onHandleIntent()方法實現的代碼,無需處理多線程問題;
所有請求處理完成後,IntentService會自動停止,無需調用stopSelf()方法停止Service;
為Service的onBind()提供默認實現,返回null;
為Service的onStartCommand提供默認實現,將請求Intent添加到隊列中;
三、使用步驟(詳情參考Service項目)
繼承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) {
// 創建所需要啟動的Service的Intent
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
public void startIntentService(View source) {
// 創建需要啟動的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會使用單獨的線程來執行該方法的代碼
// 該方法內執行耗時任務,比如下載文件,此處只是讓線程等待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("----耗時任務執行完成---");
}
}
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) {
// 該方法內執行耗時任務可能導致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("----耗時任務執行完成---");
return START_STICKY;
}
} 運行上述代碼,啟動MyIntentService的會使用單獨的worker線程,因此不會阻塞前台的UI線程;而MyService會
Android 使用Vitamio打造自己的萬能播放器(5)——在線播放(播放優酷視頻)
前言 為了保證每周一篇的進度,又由於Vitamio新版本沒有發布, 決定推遲本地播放的一些功能(截圖、視頻時間、尺寸等),跳過直接寫在線播放部分的章節。從V
Android屬性動畫與自定義View——實現vivo x6更新系統的動畫效果
晚上好,現在是凌晨兩點半,然後我還在寫代碼。電腦裡播放著《凌晨兩點半》,晚上寫代碼,腦子更清醒,思路更清晰。今天聊聊屬性動畫和自定義View搭配使用,前面都講到自定義Vi
Android漫游記(2)---ELF可執行文件格式
ELF是類Unix類系統,當然也包括Android系統上的可執行文件格式(也包括.so和.o類文件)。可以理解為Android系統上的exe或者dll文件&
Android中的各種保活1
目前市面上的應用,貌似除了微信和手Q都會比較擔心被用戶或者系統(廠商)殺死問題。本文對 Android 進程拉活進行一個總結。Android 進程拉活包括兩個層面:A.