中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

android通信,Android網(wǎng)絡(luò)通信

Android進(jìn)程間和線程間通信方式

? 進(jìn)程:是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的永修網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

??線程:是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一些在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。

??區(qū)別:

??(1)、一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程;

??(2)、線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高;

??(3)、進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,但線程之間沒有單獨(dú)的地址空間,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉。

---------------------

一、Android進(jìn)程間通信方式

1.Bundle

??由于Activity,Service,Receiver都是可以通過Intent來攜帶Bundle傳輸數(shù)據(jù)的,所以我們可以在一個(gè)進(jìn)程中通過Intent將攜帶數(shù)據(jù)的Bundle發(fā)送到另一個(gè)進(jìn)程的組件。

??缺點(diǎn):無法傳輸Bundle不支持的數(shù)據(jù)類型。

2.ContentProvider

??ContentProvider是Android四大組件之一,以表格的方式來儲(chǔ)存數(shù)據(jù),提供給外界,即Content Provider可以跨進(jìn)程訪問其他應(yīng)用程序中的數(shù)據(jù)。用法是繼承ContentProvider,實(shí)現(xiàn)onCreate,query,update,insert,delete和getType方法,onCreate是負(fù)責(zé)創(chuàng)建時(shí)做一些初始化的工作,增刪查改的方法就是對數(shù)據(jù)的查詢和修改,getType是返回一個(gè)String,表示Uri請求的類型。注冊完后就可以使用ContentResolver去請求指定的Uri。

3.文件

??兩個(gè)進(jìn)程可以到同一個(gè)文件去交換數(shù)據(jù),我們不僅可以保存文本文件,還可以將對象持久化到文件,從另一個(gè)文件恢復(fù)。要注意的是,當(dāng)并發(fā)讀/寫時(shí)可能會(huì)出現(xiàn)并發(fā)的問題。

4.Broadcast

??Broadcast可以向android系統(tǒng)中所有應(yīng)用程序發(fā)送廣播,而需要跨進(jìn)程通訊的應(yīng)用程序可以監(jiān)聽這些廣播。

5.AIDL方式

??Service和Content Provider類似,也可以訪問其他應(yīng)用程序中的數(shù)據(jù),Content Provider返回的是Cursor對象,而Service返回的是Java對象,這種可以跨進(jìn)程通訊的服務(wù)叫AIDL服務(wù)。

? ? ?AIDL通過定義服務(wù)端暴露的接口,以提供給客戶端來調(diào)用,AIDL使服務(wù)器可以并行處理,而Messenger封裝了AIDL之后只能串行運(yùn)行,所以Messenger一般用作消息傳遞。

6.Messenger

??Messenger是基于AIDL實(shí)現(xiàn)的,服務(wù)端(被動(dòng)方)提供一個(gè)Service來處理客戶端(主動(dòng)方)連接,維護(hù)一個(gè)Handler來創(chuàng)建Messenger,在onBind時(shí)返回Messenger的binder。

??雙方用Messenger來發(fā)送數(shù)據(jù),用Handler來處理數(shù)據(jù)。Messenger處理數(shù)據(jù)依靠Handler,所以是串行的,也就是說,Handler接到多個(gè)message時(shí),就要排隊(duì)依次處理。

7.Socket

??Socket方法是通過網(wǎng)絡(luò)來進(jìn)行數(shù)據(jù)交換,注意的是要在子線程請求,不然會(huì)堵塞主線程??蛻舳撕头?wù)端建立連接之后即可不斷傳輸數(shù)據(jù),比較適合實(shí)時(shí)的數(shù)據(jù)傳輸

二、Android線程間通信方式

??一般說線程間通信主要是指主線程(也叫UI線程)和子線程之間的通信,主要有以下兩種方式:

1.AsyncTask機(jī)制

??AsyncTask,異步任務(wù),也就是說在UI線程運(yùn)行的時(shí)候,可以在后臺(tái)的執(zhí)行一些異步的操作;AsyncTask可以很容易且正確地使用UI線程,AsyncTask允許進(jìn)行后臺(tái)操作,并在不顯示使用工作線程或Handler機(jī)制的情況下,將結(jié)果反饋給UI線程。但是AsyncTask只能用于短時(shí)間的操作(最多幾秒就應(yīng)該結(jié)束的操作),如果需要長時(shí)間運(yùn)行在后臺(tái),就不適合使用AsyncTask了,只能去使用Java提供的其他API來實(shí)現(xiàn)。

2.Handler機(jī)制

??Handler,繼承自O(shè)bject類,用來發(fā)送和處理Message對象或Runnable對象;Handler在創(chuàng)建時(shí)會(huì)與當(dāng)前所在的線程的Looper對象相關(guān)聯(lián)(如果當(dāng)前線程的Looper為空或不存在,則會(huì)拋出異常,此時(shí)需要在線程中主動(dòng)調(diào)用Looper.prepare()來創(chuàng)建一個(gè)Looper對象)。使用Handler的主要作用就是在后面的過程中發(fā)送和處理Message對象和讓其他的線程完成某一個(gè)動(dòng)作(如在工作線程中通過Handler對象發(fā)送一個(gè)Message對象,讓UI線程進(jìn)行UI的更新,然后UI線程就會(huì)在MessageQueue中得到這個(gè)Message對象(取出Message對象是由其相關(guān)聯(lián)的Looper對象完成的),并作出相應(yīng)的響應(yīng))。

三、Android兩個(gè)子線程之間通信

??面試的過程中,有些面試官可能會(huì)問Android子線程之間的通信方式,由于絕大部分程序員主要關(guān)注的是Android主線程和子線程之間的通信,所以這個(gè)問題很容易讓人懵逼。

??主線程和子線程之間的通信可以通過主線程中的handler把子線程中的message發(fā)給主線程中的looper,或者,主線程中的handler通過post向looper中發(fā)送一個(gè)runnable。但looper默認(rèn)存在于main線程中,子線程中沒有Looper,該怎么辦呢?其實(shí)原理很簡單,把looper綁定到子線程中,并且創(chuàng)建一個(gè)handler。在另一個(gè)線程中通過這個(gè)handler發(fā)送消息,就可以實(shí)現(xiàn)子線程之間的通信了。

??子線程創(chuàng)建handler的兩種方式:

??方式一:給子線程創(chuàng)建Looper對象:

new Thread(new Runnable() {

? ? ? ? public void run() {?

? ? ? ? ? ? Looper.prepare();? // 給這個(gè)Thread創(chuàng)建Looper對象,一個(gè)Thead只有一個(gè)Looper對象

? ? ? ? ? ? Handler handler = new Handler(){?

? ? ? ? ? ? ? ? @Override?

? ? ? ? ? ? ? ? public void handleMessage(Message msg) {?

? ? ? ? ? ? ? ? ? ? Toast.makeText(getApplicationContext(), "handleMessage", Toast.LENGTH_LONG).show();?

? ? ? ? ? ? ? ? }?

? ? ? ? ? ? };?

? ? ? ? ? ? handler.sendEmptyMessage(1);?

? ? ? ? ? ? Looper.loop(); // 不斷遍歷MessageQueue中是否有消息

? ? ? ? };?

? ? }).start();

---------------------

? ?方式二:獲取主線程的looper,或者說是UI線程的looper:

new Thread(new Runnable() {

? ? ? ? public void run() {?

? ? ? ? ? ? Handler handler = new Handler(Looper.getMainLooper()){ // 區(qū)別在這?。?!?

? ? ? ? ? ? ? ? @Override?

? ? ? ? ? ? ? ? public void handleMessage(Message msg) {?

? ? ? ? ? ? ? ? ? ? Toast.makeText(getApplicationContext(), "handleMessage", Toast.LENGTH_LONG).show();?

? ? ? ? ? ? ? ? }?

? ? ? ? ? ? };?

? ? ? ? ? ? handler.sendEmptyMessage(1);?

? ? ? ? };?

? ? }).start();

---------------------

了解Android進(jìn)程間通信的四種方式

由于應(yīng)用程序之間不能共享內(nèi)存。在不同應(yīng)用程序之間交互數(shù)據(jù)(跨進(jìn)程通訊),在android?

SDK中提供了4種用于跨進(jìn)程通訊的方式。這4種方式正好對應(yīng)于android系統(tǒng)中4種應(yīng)用程序組

件:Activity、Content Provider、Broadcast和Service。其中Activity可以跨進(jìn)程調(diào)用其他應(yīng)

用程序的Activity;Content Provider可以跨進(jìn)程訪問其他應(yīng)用程序中的數(shù)據(jù)(以Cursor對象形

式返回),當(dāng)然,也可以對其他應(yīng)用程序的數(shù)據(jù)進(jìn)行增、刪、改操 作;Broadcast可以向

android系統(tǒng)中所有應(yīng)用程序發(fā)送廣播,而需要跨進(jìn)程通訊的應(yīng)用程序可以監(jiān)聽這些廣播;

Service和Content Provider類似,也可以訪問其他應(yīng)用程序中的數(shù)據(jù),但不同的是,Content?

Provider返回的是Cursor對象,而Service返回的是Java對象,這種可以跨進(jìn)程通訊的服務(wù)叫

AIDL服務(wù)。

Android進(jìn)程間通信

1. 簡要說說進(jìn)程與線程的區(qū)別和聯(lián)系。

2. 應(yīng)用內(nèi)使用多進(jìn)程可能導(dǎo)致哪些問題?

當(dāng)一個(gè)APP啟用了多進(jìn)程后,系統(tǒng)會(huì)為不同的進(jìn)程分配不同的內(nèi)存空間,因此所有需要通過內(nèi)存共享的行為都會(huì)失敗。另外,還會(huì)導(dǎo)致以下幾個(gè)問題:

3. Android中有哪些進(jìn)程間通信方式?

由于不同的進(jìn)程擁有不同的數(shù)據(jù)空間,所以無論是應(yīng)用內(nèi)還是應(yīng)用間,均無法通過共享內(nèi)存來實(shí)現(xiàn)進(jìn)程間通信。

進(jìn)程和線程的主要區(qū)別(總結(jié)) - CSDN

線程和進(jìn)程的區(qū)別是什么? - 知乎

Android 多進(jìn)程通信之幾個(gè)基本問題

面試題:IPC(跨進(jìn)程通信)

當(dāng)前文章:android通信,Android網(wǎng)絡(luò)通信
文章網(wǎng)址:http://m.rwnh.cn/article8/phpeop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版云服務(wù)器、微信小程序、做網(wǎng)站、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
卢龙县| 马边| 巴南区| 板桥市| 泗阳县| 凤庆县| 安新县| 沅江市| 砚山县| 阳城县| 怀来县| 依兰县| 孟州市| 芦山县| 吉林市| 舒城县| 麻栗坡县| 克东县| 富民县| 黄山市| 新乡市| 都匀市| 南雄市| 禄丰县| 体育| 昭觉县| 图们市| 资阳市| 明溪县| 巴东县| 余庆县| 南汇区| 焦作市| 广河县| 海林市| 祁东县| 海宁市| 疏附县| 思茅市| 伊宁市| 平阴县|