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

Android 码拜 5年前 (2015-04-23) 183次浏览 0个评论
	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就没有这个错误,但是那个功能比较简单,在不知不觉加了很多功能之后,这个警告才出现的)

跪谢。。。

the handler class should be static,求大神看看哪里没搭好
等待大神的指导…
the handler class should be static,求大神看看哪里没搭好
45分
问题1:
handlerMessage里的消息,貌似应该要用switch-case结构,根据msg.what来处理
不这么写会报错
问题2:
Handler handler=new Handler(new Handler.Callback() {

@Override
public boolean handleMessage(Message msg) {
// TODO
return false;
}
});

the handler class should be static,求大神看看哪里没搭好
5分
非static 容易引起内存泄漏.
参考: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html
建议使用 EventBus 事件总线框架 
参考: http://blog.csdn.net/lmj623565791/article/details/40920453
the handler class should be static,求大神看看哪里没搭好
补充问题1:
handler创建的时候要看在哪个线程
1、你new handler的时候可以传入主线程的looper,参见handler的构造函数
2、或者起工作线程时,自己写一个线程的构造函数把主线程的handler传过来,

public MyThread(Handler handler)//handler是主线程的
{
        this.handler=handler;//获取主线程的handler
}

the handler class should be static,求大神看看哪里没搭好
引用 4 楼 inquisitive_plus 的回复:

补充问题1:
handler创建的时候要看在哪个线程。
1、你new handler的时候可以传入主线程的looper,参见handler的构造函数
2、或者起工作线程时,自己写一个线程的构造函数把主线程的handler传过来,

public MyThread(Handler handler)//handler是主线程的
{
        this.handler=handler;//获取主线程的handler
}

好的~~~我先试试~~!

the handler class should be static,求大神看看哪里没搭好
引用 3 楼 sirnuo 的回复:

非static 容易引起内存泄漏.
参考: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html
建议使用 EventBus 事件总线框架 
参考: http://blog.csdn.net/lmj623565791/article/details/40920453

你说的这个我看到过了·~~


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明the handler class should be static,求大神看看哪里没搭好
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!