经典博客

主要将一些好的博客文章收集起来

讲解okhttp的用法及封装:http://blog.youkuaiyun.com/lmj623565791/article/details/49734867

讲解子线程中不能创建Handler:http://www.cnblogs.com/sonicit/archive/2013/01/13/2858475.html

Handler,Looper,Message,Thread的用法:http://blog.youkuaiyun.com/fiendvip/article/details/50890289

在AppCompactActivity中的ActionBar中Menu隐藏后Item无法显示Icon,不是在onMenuOpened反射,而是在onPrepareOptionsPanel方法里面去反射
原文链接:http://www.jianshu.com/p/4b533d1fc7d4
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
文/ClownQiang(简书作者)

Handler当中内存泄露的问题:

下面这段代码是Handler发送的Message进入消息队列时必须调用的方法:
private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
msg.target = this; // 这个Message引用了Handler对象
if (mAsynchronous) {
msg.setAsynchronous(true);
}
return queue.enqueueMessage(msg, uptimeMillis);
}
可以看到发送到消息队列的Message对象持有一个发送该消息的Handler的引用,这样系统就可以调用Handler#handleMessage()方法来分发处理该消息。
那么泄漏发生在哪里呢?考虑下面一个例子:

public class MainActivity extends Activity {
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    mLeakyHandler.postDelayed(new Runnable() {  
        public void run() { }  
    }, 100000);  

    finish();  
}

}
当Activity被finish之后,我们发出的那个延时消息将在主线程的消息队列中保持10分钟,直到该消息最终被处理,由于消息持有一个Handler引用,而Handler又持有一个它的外部类MainActivity的引用,这样就阻止了Activity被“垃圾回收”,从而泄漏了Activity引用的所有应用资源,注意上述例子中的匿名的Runnable对象也一样造成了Activity的泄漏。

一般来说,这种内存泄漏的情况通常不会发生,除非你发送了一个延时很长的消息。

(the handler class should be static or leaks might occur)这个警告便表示 Handler 应该宣告为 static 以免程序发生无法预期的问题。
但宣告为static 又无法使用 Activity 內的 function。这时就必需要用到 weakreference 这个类型的设计方法如此即可在 Handler 內存取 Activity 的成员
使用Static+WeakRefrences解决:http://2dxgujun.com/post/2014/09/11/Handler-Leaks-Solution.html 著作权归作者所有

使用按钮让viewpager左右滑动:arrawScroll(2)右,arrawScroll(1)左,
并且还想点击按钮实现缓慢(类似手滑动的效果)需细看:
http://blog.youkuaiyun.com/liyulei316686082/article/details/7616734

Java强引用、 软引用、 弱引用、虚引用:
http://my.oschina.net/ydsakyclguozi/blog/404389
http://www.2cto.com/kf/201207/139522.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值