js和java对象交互
-
获取webview控件的websetting
-
设置websetting.setJavascriptEnabled( true )
-
将一个对象暴露给JavaScript:webview.addJavascriptInterface。这个对象包含了JS调用的方法,这些方法用@JavascriptInterface修饰
-
JS通过这些方法与Android交互
防止OOM
- 在代码中动态地将webview设置到布局中,而不是直接写到xml文件中;
- 在Activity的onDestory中销毁webview
线程相关
Linux线程基础
- 线程与进程的区别
- 线程同步
- Linux线程通讯方式
ANR
- what
- Activity 5s内无响应,BroadcastReceiver 10s内无响应
- /data/anr/traces.txt 文件记录了ANR的信息
- why
- how
耗时任务或者线程间通讯
-
AsyncTask
-
本质上是对 ThreadPool 和 Handler 的一个封装
-
默认是串行的执行任务,可以调用executeOnExecutors()方法并行执行任务
-
Handler
-
IntentService
Handler
- Handler + MessageQueue + Looper
MessageQueue本质上是一个单链表,不是Queue。采用FIFO方式管理,enqueueMessage()方法是将消息插入一条队列,next()方法是一个无限循环的方法。如果有消息,则取出,如果没有,就阻塞。
- HandlerThread
本质上是一个继承了Thread的线程类。
通过创建HandlerThread获取looper对象,传递给Handler对象,执行异步任务。在HandlerThread中通过**Looper.prepare()来创建消息队列,并通过Looper.loop()**来开启消息循环。创建HandlerThread后必须先调用start()方法,才能调用getLooper()获取Looper对象。
HandlerThread封装了Looper对象,使我们不用关心Looper的开启和释放的细节问题。如果不用HandlerThread的话,需要手动去调用Looper.prepare()和Looper.loop()这些方法。
AIDL
-
使用流程:以Activity(进程1)和Service(进程2)通信为例
-
创建AIDL接口,Build一下,产生相关代码
-
创建IBinder实例,即实例化xxx.Stub()抽象内部类,override抽象方法
-
创建Service,在onBind()中,把上述IBinder实例返回
-
在Activity中调用bindService启动Service,然后在ServiceConnection中的onServiceConnected方法回调中获得该IBinder实例。
-
Activity调用该实例的方法,实现通信
Messager
-
一种轻量级的跨进程通讯方案,底层使用AIDL实现。
-
是一种串行的通信,即服务端需要一个一个处理消息。因此,在大量并发请求的情况下,用Messager
响应式编程
RxJava/RxAndroid
基于观察者模式,可以方便地以流的方式处理异步事件
-
创建:
Observable.create/just/from -
Schedulers线程调度
-
在不指定线程的情况下, RxJava 遵循的是线程不变的原则
-
subscribeOn():
-
指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。
-
subscribeOn() 的位置放在哪里都可以,但它是只能调用一次的。
-
observeOn():
-
Subscriber 所运行在的线程,或者叫做事件消费的线程。
-
指定的是它之后的操作所在的线程,以此实现线程的多次调用
-
举例:
基于观察者模式,可以方便地以流的方式处理异步事件
-
创建:
Observable.create/just/from -
Schedulers线程调度
-
在不指定线程的情况下, RxJava 遵循的是线程不变的原则
-
subscribeOn():
-
指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。
-
subscribeOn() 的位置放在哪里都可以,但它是只能调用一次的。
-
observeOn():
-
Subscriber 所运行在的线程,或者叫做事件消费的线程。
-
指定的是它之后的操作所在的线程,以此实现线程的多次调用
-
举例:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
-