日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

IntentService的原理及應用

來源: 責編: 時間:2024-05-09 09:24:53 197觀看
導讀IntentService是Android中Service的一個子類,一般用于執行后臺耗時任務和處理異步請求。通過startService(Intent)方法傳遞請求給IntentService時,IntentService會在一個新的工作線程(worker thread)中處理每個Intent對象

IntentService是Android中Service的一個子類,一般用于執行后臺耗時任務和處理異步請求。通過startService(Intent)方法傳遞請求給IntentService時,IntentService會在一個新的工作線程(worker thread)中處理每個Intent對象。當所有的工作任務都執行完畢,IntentService會自動停止。DcB28資訊網——每日最新資訊28at.com

與傳統的Service不同,IntentService默認不會在主線程中運行,可以避免因執行耗時或可能被阻塞的操作而導致應用程序被掛起或出現ANR錯誤。IntentService內部創建了一個工作隊列(worker queue),一次只傳遞一個Intent到onHandleIntent方法中進行處理,簡化了多線程編程的復雜性。DcB28資訊網——每日最新資訊28at.com

IntentService使用

  1. 「創建 IntentService 子類」

創建一個繼承自 IntentService 的類,重寫 onHandleIntent 方法。onHandleIntent 方法會在一個單獨的工作線程中運行,用于處理你的后臺任務。DcB28資訊網——每日最新資訊28at.com

public class ChildIntentService extends IntentService {    public ChildIntentService() {        super("Reathin");    }    @Override    protected void onHandleIntent(@Nullable Intent intent) {        //執行耗時任務        Log.d(TAG, "onHandleIntent:耗時任務開始");        String serviceName = intent.getStringExtra("serviceName");        if (TextUtils.equals(serviceName, "ChildIntentService")){            simulationTask();            Log.d(TAG, "onHandleIntent:耗時任務完成");        }    }    /**     * 模擬耗時任務     */    private void simulationTask() {        try {            Thread.sleep(5000);        } catch (InterruptedException e) {            e.printStackTrace();        }    }    @Override    public void onDestroy() {        super.onDestroy();        Log.d(TAG, "onDestroy:服務自動停止");    }}
  1. 「啟動 IntentService」

通過創建一個 Intent 對象并調用 Context.startService(Intent) 方法來啟動 IntentService。你可以將需要傳遞給 IntentService 的數據放在 Intent 的 extras 中。DcB28資訊網——每日最新資訊28at.com

Intent intent = new Intent(MainActivity.this, ChildIntentService.class);intent.putExtra("serviceName", "ChildIntentService");startService(intent);
  1. 「停止 IntentService」通常不需要手動停止 IntentService,因為任務都處理完成后自動停止。如果確實需要立即停止,可以調用 stopSelf() 方法。注意,即使調用了 stopSelf(),onHandleIntent 方法中正在處理的任務仍然會完成。
  2. 「處理結果」IntentService 在一個后臺線程中運行,不能直接在 onHandleIntent 方法中更新 UI。如果需要將結果返回給 UI 線程,可以使用 Handler、BroadcastReceiver、LiveData、RxJava 等機制來實現。
2024-05-07 18:05:41.712 11300-11349 onHandleIntent:耗時任務開始2024-05-07 18:05:46.713 11300-11349 onHandleIntent:耗時任務完成2024-05-07 18:05:46.716 11300-11300 onDestroy:服務自動停止

IntentService原理

IntentService封裝了HandlerThread和Handler,當第一次被啟動,會調用它的onCreate方法。DcB28資訊網——每日最新資訊28at.com

@Overridepublic void onCreate() {    // TODO: It would be nice to have an option to hold a partial wakelock    // during processing, and to have a static startService(Context, Intent)    // method that would launch the service & hand off a wakelock.    super.onCreate();    HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");    thread.start();    mServiceLooper = thread.getLooper();    mServiceHandler = new ServiceHandler(mServiceLooper);}

onCreate方法會創建一個HandlerThread對象并調用它的start方法,利用這個HandlerThread的Looper創建ServiceHandler對象mServiceHandler,這樣通過mServiceHandler發送的消息最終都會在HandlerThread中執行。DcB28資訊網——每日最新資訊28at.com

每次啟動IntentService,它的onStartCommand方法都會調用一次。DcB28資訊網——每日最新資訊28at.com

@Overridepublic void onStart(@Nullable Intent intent, int startId) {    Message msg = mServiceHandler.obtainMessage();    msg.arg1 = startId;    msg.obj = intent;    mServiceHandler.sendMessage(msg);}@Overridepublic int onStartCommand(@Nullable Intent intent, int flags, int startId) {    onStart(intent, startId);    return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;}

onStartCommand方法中直接調用onStart方法,onStart方法只是把intent封裝進一個消息,并通過mServiceHandler發送出去。DcB28資訊網——每日最新資訊28at.com

private final class ServiceHandler extends Handler {    public ServiceHandler(Looper looper) {        super(looper);    }    @Override    public void handleMessage(Message msg) {        onHandleIntent((Intent)msg.obj);        stopSelf(msg.arg1);    }}

ServiceHandler內部很簡單,在收到消息之后會把消息傳遞給onHandleIntent方法處理,onHandleIntent方法需要我們在子類中實現,它的作用是通過Intent區分具體任務并執行這些任務。當onHandleIntent方法結束后會調用IntentService的stopSelf(int startId)方法嘗試停止服務,因為這個時候可能還有其他消息未處理,只有所有消息都處理完才會真的停止服務。DcB28資訊網——每日最新資訊28at.com

現在我們知道了,IntentService的內部是通過消息的方式請求HandlerThread執行任務,HandlerThread內部又是一種使用Handler的Thread,這就意味著IntentService和Looper一樣是順序執行后臺任務的。DcB28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-87486-0.htmlIntentService的原理及應用

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 新手必看:Python中的字符串格式化入門指南

下一篇: 工作中最常見的6種OOM(內存溢出)問題,你知道幾個?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产午夜精品理论片a级大结局| 欧美精品一区在线| 西西裸体人体做爰大胆久久久| 性欧美18~19sex高清播放| 久久精品成人一区二区三区蜜臀 | 欧美肥婆在线| 国产精品人人爽人人做我的可爱 | 国产综合色在线视频区| 亚洲日本免费| 亚洲欧美日韩国产综合精品二区| 欧美专区在线| 欧美激情自拍| 国产麻豆成人精品| 亚洲国产裸拍裸体视频在线观看乱了中文 | 久久综合久久久久88| 欧美日韩一区二区视频在线| 国产视频观看一区| 亚洲精品日韩综合观看成人91| 午夜精品视频在线观看| 欧美成人精品1314www| 国产精品国产精品| 亚洲激情视频在线| 欧美一区二区免费观在线| 老司机免费视频一区二区| 国产精品扒开腿做爽爽爽软件 | 欧美一级久久| 欧美日韩的一区二区| 国产亚洲综合在线| 一区二区高清视频在线观看| 久久久噜噜噜久久| 国产精品美女久久久久av超清 | 午夜精品免费在线| 欧美日韩国产天堂| 在线观看成人一级片| 亚洲免费视频在线观看| 欧美成人资源| 黄色av成人| 亚洲欧美日产图| 欧美激情在线播放| 黄网站色欧美视频| 亚洲欧美视频在线| 欧美日韩成人在线| 在线观看日韩av先锋影音电影院| 午夜精品久久| 欧美色精品在线视频| 亚洲国产国产亚洲一二三| 香蕉久久一区二区不卡无毒影院| 欧美日韩另类国产亚洲欧美一级| 在线日韩中文字幕| 久久成人免费网| 国产精品视频一二三| 一本久道久久综合中文字幕| 欧美激情一区二区久久久| 欲色影视综合吧| 久久精品视频99| 国产区精品在线观看| 亚洲一区二区三区在线看| 欧美精品在线观看| 亚洲激情在线观看| 免费一级欧美片在线观看| 激情视频一区二区| 久久久99爱| 国产一区视频观看| 欧美在线视频一区| 国产一区 二区 三区一级| 亚洲无亚洲人成网站77777 | 在线精品高清中文字幕| 久久久777| 国内久久视频| 欧美一区国产在线| 国产日韩精品一区二区三区 | 欧美久久久久中文字幕| 亚洲国产视频直播| 裸体女人亚洲精品一区| 樱桃视频在线观看一区| 久久一区二区三区四区| 在线欧美日韩| 欧美高清在线| 亚洲每日更新| 欧美三级日本三级少妇99| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩国产999| 一个色综合导航| 欧美视频在线一区二区三区| 亚洲桃花岛网站| 国产精品美女视频网站| 香蕉av777xxx色综合一区| 国产美女高潮久久白浆| 欧美中文字幕在线| 一区二区三区在线观看视频| 蜜臀av国产精品久久久久| 91久久在线播放| 欧美日韩一区二区欧美激情 | aⅴ色国产欧美| 欧美午夜精彩| 午夜精品视频一区| 激情国产一区二区| 蘑菇福利视频一区播放| 亚洲人成在线观看一区二区| 欧美日韩亚洲在线| 亚洲欧美伊人| 精品999网站| 欧美激情第4页| 正在播放欧美一区| 国产日韩欧美一二三区| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲国内自拍| 欧美四级电影网站| 欧美一区2区三区4区公司二百| 好吊日精品视频| 欧美女主播在线| 午夜在线电影亚洲一区| 伊大人香蕉综合8在线视| 欧美精品一区二区三区很污很色的| 亚洲性视频网站| 国内揄拍国内精品少妇国语| 欧美高清视频在线| 亚洲在线一区二区三区| 黄色日韩网站视频| 欧美日韩一区精品| 欧美诱惑福利视频| 亚洲黄网站在线观看| 欧美午夜不卡在线观看免费| 久久精精品视频| 亚洲美女视频在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 久久免费观看视频| 一区二区国产在线观看| 国产亚洲综合精品| 欧美日本国产一区| 久久成人免费| 日韩网站在线观看| 国产亚洲欧美一区| 欧美精品尤物在线| 欧美在线视频观看| 日韩视频一区二区在线观看| 国产视频一区在线观看一区免费 | 国产色综合久久| 欧美理论在线| 久久国产精品久久久| 日韩亚洲精品在线| 韩国自拍一区| 欧美日韩视频一区二区三区| 久久精品天堂| 亚洲视频一区在线| 亚洲电影免费观看高清完整版| 国产精品久久久久久影视| 欧美国产第二页| 久久精品av麻豆的观看方式 | 欧美日本亚洲视频| 久久久久久久久综合| 亚洲素人一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品入口夜色视频大尺度 | 国产三区精品| 欧美午夜不卡视频| 欧美黑人在线观看| 久久精品一区二区| 亚洲制服av| 99re视频这里只有精品| 在线看片成人| 国产亚洲精品bv在线观看| 欧美视频一二三区| 欧美成在线观看| 久久久久亚洲综合| 亚洲欧美综合精品久久成人| 日韩一级精品视频在线观看| 在线不卡a资源高清| 欧美日韩天堂| 亚洲人成在线免费观看| 激情五月***国产精品| 国产精品中文在线| 欧美日韩在线亚洲一区蜜芽| 免费在线视频一区| 久久亚洲国产精品日日av夜夜| 欧美一级免费视频| 亚洲欧美日韩精品久久久久| 亚洲午夜精品一区二区三区他趣| 99国产精品99久久久久久粉嫩| 亚洲经典在线看| 亚洲第一天堂av| 一区二区三区在线观看视频| 国产一区二区三区免费不卡| 国产精品影片在线观看| 国产精品h在线观看| 欧美日韩成人网| 欧美日韩不卡一区| 欧美全黄视频| 欧美人与禽猛交乱配| 欧美激情亚洲精品| 欧美成人蜜桃| 你懂的亚洲视频| 欧美18av| 欧美精品亚洲一区二区在线播放| 欧美韩日精品| 欧美日本在线播放| 欧美人成在线| 欧美小视频在线观看| 国产精品vvv| 国产精品久久久久9999| 国产精品久久久久久久久久妞妞| 国产精品国产三级国产| 国产精品久久久对白| 国产精品一区久久|