您的位置:首页 > 移动开发 > Android开发

android handler 里面引用context有耗时操作是的正确打开方式

2018-01-12 18:08 281 查看
Handler
这个的话,我敢保证,你绝对有用过!

private Handler recordHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
}
};
是不是绝大部分人都是这样来操作的?给我说中了吧,其实就跟上面说到的非静态内部类一样,将 Handler 声明为静态的, 则其存活期跟 Activity 的生命周期就无关了。同时通过弱引用的方式引入 Activity, 避免直接将Activity 作为 context 传进去。
正确的使用方式是
static class TestHandler extends Handler {
private final WeakReference<Test> mActivityRef;
TestHandler(Test activity) {
mActivityRef = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
final Test activity = mActivityRef.get();
if (activity == null || activity.isFinishing()) {
removeCallbacksAndMessages(null);
return;
}
switch (msg.what) {
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息