詳解androidwebView獨立進程通訊方式-創(chuàng)新互聯(lián)

為什么需要將webView放在獨立進程

發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認真做好每個細節(jié),不斷完善自我,成就企業(yè),實現(xiàn)共贏。行業(yè)涉及除甲醛等,在網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣、WAP手機網(wǎng)站、VI設(shè)計、軟件開發(fā)等項目上具有豐富的設(shè)計經(jīng)驗。
  • webView 加載網(wǎng)頁的時候可能占用大量內(nèi)存,導(dǎo)致應(yīng)用程序OOM。
  • webView 在訪問結(jié)束的時候可以直接殺死該進程,防止內(nèi)存泄漏。
  • webView 在崩潰的時候不影響主進程。

webView獨立進程需要注意什么

  • 由于進程之間內(nèi)存是獨立的,所以導(dǎo)致了Appcation, 靜態(tài)類需要在新的進程重新創(chuàng)建。
  • 內(nèi)存中的數(shù)據(jù)不共享,需要跨進程通訊。

如何聲明一個獨立進程

在默認情況下,同一應(yīng)用的所有組件都在相同的進程中運行。
在Manifest中可以設(shè)置各組件 (<activity>、<service>、<receiver>、<provider>)的 android:process 屬性來指定相應(yīng)的進程。

跨進程的方式

在android當中提供了2種方式實現(xiàn)。


一種是Messenger, 另一種是Aidl.

  • Messenger:實現(xiàn)相對簡單,將所有請求放到消息隊列中,不適合做并發(fā)處理,在大多數(shù)的場景用Messenger就可以實現(xiàn)了。
  • AIDL: 適合并發(fā)操作。直接方法調(diào)用,結(jié)構(gòu)更清晰。

Messenger

由于Messenger是采用消息隊列的方式實現(xiàn),所有接受和發(fā)送的時候都需要Handler協(xié)助。

服務(wù)端

public class MessengerService extends Service {
  
  public static final int GET_DATA = 1;
  public static final int SET_DATA = 2;
  
  Messenger messenger = new Messenger(new ServiceHandler());
  Messenger replyMessenger; //向客服端返回信息
  public MessengerService() {
  }
  
  @Override
  public IBinder onBind(Intent intent) {
    return messenger.getBinder();
  }
  
  
  class ServiceHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
      replyMessenger = msg.replyTo;
      switch (msg.what) {
        case GET_DATA:
          //客服端向服務(wù)端請求數(shù)據(jù)
          if (replyMessenger != null) {
            Bundle bundle = new Bundle();
            bundle.putString("str", CustomData.getInstance().getData());
            Message message = Message.obtain(null, 1);
            message.setData(bundle);
            try {
              replyMessenger.send(message);
            } catch (RemoteException e) {
              e.printStackTrace();
            }
          }
          break;
        case SET_DATA:
          //客服端向服務(wù)端請求更新數(shù)據(jù)
          CustomData.getInstance().setData(msg.getData().getString("str"));
          break;
      }
    }
  }
}

本文題目:詳解androidwebView獨立進程通訊方式-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article40/ejdeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、商城網(wǎng)站、品牌網(wǎng)站設(shè)計響應(yīng)式網(wǎng)站、自適應(yīng)網(wǎng)站、動態(tài)網(wǎng)站

廣告

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

綿陽服務(wù)器托管