当前位置: 代码迷 >> Android >> the handler class should be static,求大神见见哪里没搭好
  详细解决方案

the handler class should be static,求大神见见哪里没搭好

热度:267   发布时间:2016-04-28 01:32:29.0
the handler class should be static,求大神看看哪里没搭好
	public Bitmap downloadImage(final String url, final int resource,
final onImageLoaderListener listener) {
final String subUrl = url.replaceAll("[^\\w]", "");
Bitmap bitmap = showCacheBitmap(subUrl);
if (bitmap != null) {
return bitmap;
} else {
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
listener.onImageLoader((Bitmap) msg.obj, url);
}
};

// new Thread(new Runnable() {
getThreadPool().execute(new Runnable() {

@Override
public void run() {
Bitmap bitmap = getBitmapFormUrl(url, resource);
Message msg = handler.obtainMessage();
msg.obj = bitmap;
handler.sendMessage(msg);
}
});
}

return null;
}


这是报警告的模块,相关问题我已经百度到很多了,我觉得是自己调用得不对。

我在mainActivity里初始化数据时调用了这里,本想用异步线程调用的,但这里有new handler  所以不能用线程。
问题一:如何解决这个问题,如何改写这里才能不报“cannot create handler in thread"

这个方法我是借用网上的,觉得很好用,所以一直在用,现在程序基本写完了,不是很想改这里了,因为很多地方都调用了这里,

问题二:
在调用这个方法的时候,要注意什么 才不会出现这个警告(我另外一个demo就没有这个错误,但是那个功能比较简单,在不知不觉加了很多功能之后,这个警告才出现的)


跪谢。。。
------解决思路----------------------
问题1:
handlerMessage里的消息,貌似应该要用switch-case结构,根据msg.what来处理
不这么写会报错
问题2:
Handler handler=new Handler(new Handler.Callback() {

@Override
public boolean handleMessage(Message msg) {
// TODO
return false;
}
});
------解决思路----------------------
非static 容易引起内存泄漏.
参考: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html
建议使用 EventBus 事件总线框架 
参考: http://blog.csdn.net/lmj623565791/article/details/40920453
  相关解决方案