第一次写自己的优快云,感觉在开发老是遇见很多一样的问题,往往都只是有印象然后又记得不是很清楚,只好去翻以前的代码,很麻烦。最近看了一篇帖子,想要提高自己的身价和技术强度,除了高效的学习新知识外总结自己遇到的问题也是很重要的。所以才有了我今天的开始,可能我自己的总结也不是正确的,希望各位同行多多指正,各位的指正是我学习前进最好的方式。一个菜鸟程序员真诚的期望!
进入正题
在Android开发过程中经常会遇到这种情况,有时我们在子线程中跑的程序需要调用到主线程才能调用的方法,比如android嵌入h5开发过程中,web给我们发送了一个消息(注意 这是在子线程进行),通知我们进行某些操作,我的通常做法通过Hander对象的sendMessage()方法切回主线程,往往都是这样一个写法:
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
你会发现编译器会提醒我们:
This Handler class should be static or leaks might occur (anonymous android.os.Handler)
这样写会导致有内存泄漏的可能,往往我 这个rookie的做法就是按照提示直接在顶部加一个
@SuppressLint("HandlerLeak")
注释掉就不在管他,治标不治本,没有想到去优化,只要编译器没有报错就万事大吉。最近在学习过程中看到另外一种写法可以解决这个的问题。
private final Handler handler = new Handler(new Handler.Callback(){
@Override
public boolean handleMessage(Message msg) {
return false;
}
});
Handler有很多中导入的开源,这里本人用的是android.os.Handler。这是为什么以及具体的原理还不怎么了解,希望明白的朋友多多指导。