SoftReference可以用于bitmap缓存

WeakReference 可以用于handler

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

    private Handler mRemoteHandler = new SafeHandler(this);
private static final int INIT_UI = ; /**
* 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 == )) {
if (null != fragment) {
Logcat.d("getWifiApConfig " + Arrays.toString(config));
fragment.setName(config[]);
if (!TextUtils.isEmpty(config[])) {
fragment.setPassword(config[]);
}
}
} }
}

Android学习笔记之SoftReference软引用,弱引用WeakReference的更多相关文章

  1. Android学习笔记之SoftReference软引用...

    PS:其实这一篇和上一篇很类似,都是为了解决内存不足(OOM)这种情况的发生... 学习内容: 1.对象的引用类....   最近也是通过项目中知道了一些东西,涉及到了对象的引用类,对象的引用类分为多 ...

  2. java当中的强引用,软引用,弱引用,虚引用

    强引用,软引用,弱引用,虚引用:不同的引用类型主要体现在GC上 强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收.即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryEr ...

  3. 【转】 Pro Android学习笔记(五七):Preferences(1):ListPreference

    目录(?)[-] 例子1ListPreference小例子 定义一个preferences XML文件 继承PreferenceActivity 用户定制偏好的读取 第一次运行时设置缺省值 设置Cat ...

  4. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  5. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

  6. 【转】Pro Android学习笔记(七):了解Content Provider(下上)

    我们通过一个Content Provider小例子进行详细说明.数据源是一个SQLite数据库,名字为books.db,该数据库只含有一个表格,名字为books.表格中含有name,isbn,auth ...

  7. 【转】Pro Android学习笔记(三):了解Android资源(上)

    在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...

  8. 01_Java 软、弱引用语法介绍

    文章导读: 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用, 本章内容介绍了Reference的概 ...

  9. Android学习笔记进阶18 之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

随机推荐

  1. Java实现桶排序和基数排序

    桶排序代码: import java.util.Arrays; /** * 桶排序 * 工作的原理是将数组分到有限数量的桶里 * 每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序 ...

  2. php设计模式2

    代理模式 <?php /** * 代理模式:为其他对象提供一个代理以控制这个对象的访问 它是给某一个对象提供一个替代者,使之在client对象和subject对象之间编码更有效率. 代理可以提供 ...

  3. android 工具库

    https://github.com/xybCoder/AndroidCommon android工具类集合

  4. Asp.Net Core WebApi (Swagger+EF Core/Code First)

    Swagger简介: Swagger™的目标是为REST APIs 定义一个标准的,与语言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下能发现和理解各种服务的功能. ...

  5. PV UV QPS 并发数

    TPS(Transactions Per Second):每秒事务数 QPS(Query Per Second):每秒请求数,QPS其实是衡量吞吐量的一个常用指标,就是说服务器在一秒的时间内处理了多少 ...

  6. 使用ML.NET + ASP.NET Core + Docker + Azure Container Instances部署.NET机器学习模型

    本文将使用ML.NET创建机器学习分类模型,通过ASP.NET Core Web API公开它,将其打包到Docker容器中,并通过Azure Container Instances将其部署到云中. ...

  7. HTTP 权威指南 详解 ( 一、概述 )

    HTTP 权威指南 详解 ( 一.概述 ) 最近在解读 <http权威指南> 这本书.之前对于http 的理解仅限于 知道我需要向服务端发送一个 get or post 请求,然后等待服务 ...

  8. IntelliJ IDEA 导入新项目

    在现有的idea中close project 关闭当前项目, 然后import project

  9. Java开发知识之Java的数字处理类Math类

    Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...

  10. Spring Boot 2.x(七):优雅的处理异常

    前言 异常的处理在我们的日常开发中是一个绕不过去的坎,在Spring Boot 项目中如何优雅的去处理异常,正是我们这一节课需要研究的方向. 异常的分类 在一个Spring Boot项目中,我们可以把 ...