Android 進(jìn)程間傳遞圖片

? ? 最近無意間看到這篇文章,里面是介紹android多進(jìn)程的一些東西,于是就想試一試在另一個(gè)進(jìn)程下載圖片然后在當(dāng)前進(jìn)程顯示的功能,這樣做主要是為了解決應(yīng)用運(yùn)行時(shí)內(nèi)存過大的問題,這里面需要用到的知識(shí)有AIDL,Service和Android多進(jìn)程技術(shù)。

? ? 首先創(chuàng)建一個(gè)Android項(xiàng)目,并在main目錄下創(chuàng)建aidl目錄,里面主要存放進(jìn)程間通信用的文件,接下來創(chuàng)建一個(gè)aidl文件,里面就定義了一個(gè)接口,用于獲取另一個(gè)進(jìn)程下載的圖片,如下圖所示:

因?yàn)閍idl文件中只支持java基本數(shù)據(jù)類型和string,List,Map,所以要使用其他的類的話,比如Bitmap,就必須再定義一個(gè)aidl文件,并在里面聲明這個(gè)類,如下圖:

處理完這兩個(gè)文件后,編譯一下,系統(tǒng)會(huì)生成一個(gè)Binder類IImageLoader.Stub,這個(gè)類非常重要,它是進(jìn)程間通信的橋梁,整個(gè)Android系統(tǒng)都是靠它連接起來的,這里不過多的深入,有興趣的一定要去研究下,接下來我們定義一個(gè)類繼承IImageLoader.Stub,并實(shí)現(xiàn)里面的getBitmap方法,getBitmap方法主要做的事就是根據(jù)imageUrl下載圖片并返回一個(gè)Bitmap,這里有很多中方法來下載圖片,我用的是一個(gè)圖片處理框架Picasso來處理,代碼如下圖:

接下來我們?cè)俣x一個(gè)會(huì)運(yùn)行在另一個(gè)進(jìn)程的service,里面只實(shí)現(xiàn)onBind方法,返回剛才定義的ImageLoaderBinder,如下圖:

并在清單文件中定義這個(gè)service,這里要用到一個(gè)屬性process,表示這個(gè)service要運(yùn)行在另一個(gè)進(jìn)程,做完這一步后,我們就可以啟動(dòng)這個(gè)service了,并通過ImageLoaderBinder獲取這個(gè)servie進(jìn)程下載的圖片了,啟動(dòng)服務(wù)需要用bindservice()方法,最后的效果圖如下:

源碼地址https://github.com/PengJunJun/MultiprocessTest。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,319評(píng)論 25 708
  • Jianwei's blog 首頁 分類 關(guān)于 歸檔 標(biāo)簽 巧用Android多進(jìn)程,微信,微博等主流App都在用...
    justCode_閱讀 6,133評(píng)論 1 23
  • Java中的String類可以被繼承么? 答:不能,因?yàn)樗且粋€(gè)final類,同樣的還有Integer,F(xiàn)loat...
    gyymz1993閱讀 4,174評(píng)論 2 104
  • 這兩天爸媽外出,我在家全職帶娃。所謂全職,意味著身兼多職:奶媽,保育員,保姆,廚師,保潔……多重身份;意味著要嚴(yán)格...
    瑜媽閱讀 351評(píng)論 0 1
  • 心中的執(zhí)念,不撞南墻心不死,我也開始做銷售了。是刻意的嘗試還是別無選擇,兩者之間吧。 電銷加直銷的形式,這也是第一...
    hxx習(xí)慣而已閱讀 262評(píng)論 0 0

友情鏈接更多精彩內(nèi)容