Android学习笔记之SoftReference软引用,弱引用WeakReference
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的更多相关文章
- Android学习笔记之SoftReference软引用...
PS:其实这一篇和上一篇很类似,都是为了解决内存不足(OOM)这种情况的发生... 学习内容: 1.对象的引用类.... 最近也是通过项目中知道了一些东西,涉及到了对象的引用类,对象的引用类分为多 ...
- java当中的强引用,软引用,弱引用,虚引用
强引用,软引用,弱引用,虚引用:不同的引用类型主要体现在GC上 强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收.即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryEr ...
- 【转】 Pro Android学习笔记(五七):Preferences(1):ListPreference
目录(?)[-] 例子1ListPreference小例子 定义一个preferences XML文件 继承PreferenceActivity 用户定制偏好的读取 第一次运行时设置缺省值 设置Cat ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】Pro Android学习笔记(七):了解Content Provider(下上)
我们通过一个Content Provider小例子进行详细说明.数据源是一个SQLite数据库,名字为books.db,该数据库只含有一个表格,名字为books.表格中含有name,isbn,auth ...
- 【转】Pro Android学习笔记(三):了解Android资源(上)
在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...
- 01_Java 软、弱引用语法介绍
文章导读: 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用, 本章内容介绍了Reference的概 ...
- Android学习笔记进阶18 之画图并保存图片到本地
1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...
随机推荐
- YOU种你来丨i春秋校园行第一站北京电子科技学院
发通告啦 i春秋互联网安全校园行即将火爆开启,第一站我们将来到北京电子科技学院.对网络安全感兴趣的大学生们注意啦,我们将走进校园送福利,Are you ready? i春秋简介 i春秋拥有全国最大的网 ...
- &和&&的共同点和区别、Java字符含义和Java创建对象的几种方式
一.&和&&的共同点和区别 1.&和&&的联系(共同点): &和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定. 操 ...
- Android OpenGL ES 开发(六): OpenGL ES 添加运动效果
在屏幕上绘制图形只是OpenGL的相当基础的特点,你也可以用其他的Android图形框架类来实现这些,包括Canvas和Drawable对象.OpenGL ES为在三维空间中移动和变换提供了额外的功能 ...
- [Swift]LeetCode12. 整数转罗马数字 | Integer to Roman
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...
- [Swift]LeetCode400. 第N个数字 | Nth Digit
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Note:n is ...
- MySQL查询昨天的数据
SELECT * FROM `表名` WHERE TO_DAYS(`时间字段名`) = TO_DAYS(NOW()) - 1; 需要前几天的话就在后面减几天.
- 【WebAPI No.4】Swagger实现API文档功能
介绍: Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为 ...
- lambda表达式中的排序问题
新月新气象,10月第一篇,这也是我工作的第一天,这一篇文章我们要讲到lambda的排序问题 我是这样排序的 var list = DB.company.OrderBy(x=>x.isfreeze ...
- Qt之QComboBox定制(二)
上一篇文章Qt之QComboBox定制讲到了qt实现自定义的下拉框,该篇文章主要实现了列表式的下拉框,这一节我还将继续讲解QComboBox的定制,而这一节我将会讲述更高级的用法,不仅仅是下拉列表框, ...
- JDK1.8源码(一)——java.util.ArrayList
ArrayList 定义 ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复. public class ArrayList<E> extends Abstr ...