为什么需要将webView放在独立进程
- webView 加载网页的时候可能占用大量内存,导致应用程序OOM。
- webView 在访问结束的时候可以直接杀死该进程,防止内存泄漏。
- webView 在崩溃的时候不影响主进程。
webView独立进程需要注意什么
- 由于进程之间内存是独立的,所以导致了Appcation, 静态类需要在新的进程重新创建。
- 内存中的数据不共享,需要跨进程通讯。
如何声明一个独立进程
在默认情况下,同一应用的所有组件都在相同的进程中运行。
在Manifest中可以设置各组件 (<activity>、<service>、<receiver>、<provider>)的 android:process 属性来指定相应的进程。
跨进程的方式
在android当中提供了2种方式实现。
一种是Messenger, 另一种是Aidl.
- Messenger:实现相对简单,将所有请求放到消息队列中,不适合做并发处理,在大多数的场景用Messenger就可以实现了。
- AIDL: 适合并发操作。直接方法调用,结构更清晰。
Messenger
由于Messenger是采用消息队列的方式实现,所有接受和发送的时候都需要Handler协助。
服务端
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: //客服端向服务端请求数据 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: //客服端向服务端请求更新数据 CustomData.getInstance().setData(msg.getData().getString("str")); break; } } }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容猜你喜欢
AI推送时光机详解android webView独立进程通讯方式
后端开发2023-05-30
详解Android 进程间通信的几种实现方式
后端开发2022-06-06
Android使用ContentProvider实现跨进程通讯示例详解
后端开发2023-03-08
Android编程实现AIDL(跨进程通信)的方法详解
后端开发2022-06-06
咦!没有更多了?去看看其它编程学习网 内容吧