在该TestActivity中声清楚明了一个延迟10分钟履行的消息 Message,mHandler将其 push 进了消息队列 MessageQueue 里。当该 Activity 被finish()掉落时,延迟履行义务的Message 还会持续存在于主线程中,它持有该 Activity 的Handler引用,所以此时 finish()掉落的 Activity 就不会被收受接收了大年夜而造成内存泄漏(因 Handler 为风静态内部类,它会持有外部类的引用,在这里就是指TestActivity)。
修复办法:采取内部静态类以及弱引用筹划。代码如下:
- public class TestActivity extends AppCompatActivity {
- private MyHandler mHandler;
- private static class MyHandler extends Handler {
- private final WeakReference<TestActivity> mActivity;
- public MyHandler(TestActivity activity) {
- mActivity = new WeakReference<>(activity);
- }
- @Override
- public void dispatchMessage(Message msg) {
- super.dispatchMessage(msg);
- TestActivity activity = mActivity.get();
- //do your things
- }
- }
- private static final Runnable mRunnable = new Runnable() {
- @Override
- public void run() {
- //do your things
- }
- };
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mHandler = new MyHandler(this);
推荐阅读
此次的成功融资让金山云的用户也跟着受益,因为金山云的主流产品将周全降价,个中CDN、云数据库Redis新价动人,降幅最大年夜可达到50%、60%;云办事器价格最大年夜降幅跨越30%;对象存储产品>>>详细阅读
本文标题:Android面试被问到内存泄漏了杂整?
地址:http://www.17bianji.com/lsqh/39898.html
1/2 1