zoukankan      html  css  js  c++  java
  • Android学习笔记之SoftReference软引用,弱引用WeakReference

    SoftReference可以用于bitmap缓存

    WeakReference 可以用于handler

     非静态内部类和匿名内部类容易造成内存泄漏

        private Handler mRemoteHandler = new SafeHandler(this);
        private static final int INIT_UI = 1;
    
        /**
         * safe handler 静态内部类
         */
        private static class SafeHandler extends Handler {
            private final WeakReference<MainActivity> mActivitys;
    
            public SafeHandler(MainActivity preview) {
                mActivitys = new WeakReference<MainActivity>(preview);
            }
    
            @Override
            public void handleMessage(Message msg) {
                MainActivity activity = mActivitys.get();
                if (activity != null) {
                    if (null != msg) {
                        switch (msg.what) {
                            case INIT_UI:
                                activity.initView();
                                activity.updateUI();
                                break;
                            default:
                                break;
                        }
                    }
                }
            }
        }
    
    
    import android.os.AsyncTask;
    import android.text.TextUtils;
    
    import com.roadrover.settings.network.NetSupplier;
    import com.roadrover.settings.network.NetworkBean;
    import com.roadrover.utils.Logcat;
    
    import java.lang.ref.WeakReference;
    import java.util.Arrays;
    
    /**
    不是内部类
     */
    public class HotSpotSafeTask extends AsyncTask<Void, Void, String[]> {
        // 弱引用允许Activity被垃圾收集器清理
        private final WeakReference<HotSpotFragment> weakFragment;
    
        public HotSpotSafeTask(HotSpotFragment fragment) {
            this.weakFragment = new WeakReference<>(fragment);
        }
    
        @Override
        public String[] doInBackground(Void... params) {
            // do async stuff here
            // 重新获取Fragment的强引用,并且判断是否存活
            HotSpotFragment fragment = weakFragment.get();
            if (fragment == null || fragment.isDetached()) {
                // Fragment死亡了,不再做任何的事情
                return null;
            }
            String[] config = fragment.getWifiApConfig();
            return config;
        }
    
        @Override
        public void onPostExecute(String[] config) {
            // 重新获取Fragment的强引用,并且判断是否存活
            HotSpotFragment fragment = weakFragment.get();
            if (fragment == null || fragment.isDetached()) {
                // Fragment死亡了,不再做任何的事情
                return;
            }
            // The Fragment is still valid, do main-thread stuff here
            if ((config != null) && (config.length == 3)) {
                if (null != fragment) {
                    Logcat.d("getWifiApConfig " + Arrays.toString(config));
                    fragment.setName(config[0]);
                    if (!TextUtils.isEmpty(config[1])) {
                        fragment.setPassword(config[1]);
                    } 
                }
            }
    
        }
    }
  • 相关阅读:
    CentOS安装配置ganglia
    k-means聚类算法
    SharePoint solution and feature management with PowerShell
    EM算法
    极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人
    学习游戏要学习编程语言吗?十大主流编程语言解析
    platform_device与platform_driver
    《用户体验要素》澄清了 UI 原型设计中看不见确感受得到的那一层
    ipconfig /flushdns 清除系统DNS缓存
    typedef和define具体的具体差别
  • 原文地址:https://www.cnblogs.com/lipeineng/p/6904139.html
Copyright © 2011-2022 走看看