android runnable内存泄漏,这个Runnable可以防止内存泄漏吗?
我在Java中的总的初学者和已经创建了一个简单的Java的Android片断其中一个Runnable 1,5秒钟后,我改变TextView从Hello
World到Hola
Mundo。它工作正常,基本上WeakReference应该防止这种内存泄漏发生吗?我怀疑在发生设备定向时是否绝对没有内存泄漏。我很乐意对此进行检查,但无法在模拟的Android中更改方向。
这是代码:
package com.example.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.util.Log;
import java.lang.ref.WeakReference;
public class HelloWorldActivity extends Activity
{
private Handler h = new Handler();
private static TextView txtview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtview = (TextView) findViewById(R.id.mainview);
h.postDelayed(new WeakRunnable(txtview),1500);
}
private static final class WeakRunnable implements Runnable {
private final WeakReference mtextview;
protected WeakRunnable(TextView textview){
mtextview = new WeakReference(textview);
}
@Override
public void run() {
TextView textview = mtextview.get();
if (textview != null) {
txtview.setText("Hola Mundo");
textview = null; // No idea if setting to null afterwards is a good idea
}
Log.d("com.example.helloworld", "" + textview);
}
}
}
编辑
它可以防止内存泄漏,但也有一些答案与UI线程阻塞有关。实际上,此代码在主(UI)线程中运行处理程序。要产生一个新线程,我要手动产生一个线程,如下所示:
package com.example.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.util.Log;
import java.lang.ref.WeakReference;
public class HelloWorldActivity extends Activity
{
private static TextView txtview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtview = (TextView) findViewById(R.id.mainview);
Thread t = new Thread(new WeakRunnable(txtview));
t.start();
}
private static final class WeakRunnable implements Runnable {
private final WeakReference mtextview;
protected WeakRunnable(TextView textview){
mtextview = new WeakReference(textview);
}
@Override
public void run() {
TextView textview = mtextview.get();
if (textview != null) {
/*
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
*/
txtview.setText("Hola Mundo");
textview = null;
}
Log.d("com.example.helloworld", "" + Thread.currentThread().getName()); // Outputs "Thread-" if not running on UI thread
}
}
}
现在的问题是,我似乎无法以任何方式延迟生成的线程,否则它将起作用。
这个:
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
使应用本身退出,我不明白为什么。某事告诉我,我以错误的方式延迟了它。
编辑2
感谢@EugenMatynov给我的链接:从android中的另一个线程更新ui,我理解了为什么退出该应用程序。归结为 您不能从主线程以外的线程调用UI方法 的原因
。 并且从另一个线程更新UI是一种不好的做法。
android runnable内存泄漏,这个Runnable可以防止内存泄漏吗?相关推荐
- Android开发笔记之:Handler Runnable与Thread的区别详解
From:http://www.jb51.net/article/37465.htm 本篇文章是对在Android中Handler Runnable与Thread的区别进行了详细的分析介绍,需要的朋友 ...
- 【转】android如何查看cpu的占用率和内存泄漏
原文网址:http://www.cnblogs.com/yejiurui/p/3472765.html 在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程 ...
- 【错误记录】Android 内存泄漏 错误排查记录 ( FinalizerReference 内存泄漏 )
文章目录 一. 报错信息 二. 内存排查 三. 代码分析及修改 四. 不同版本说明 参考以下博客 : [Android 内存优化]Android Profiler 工具常用功能 ( 监测内存 | 内存 ...
- 【Android 内存优化】垃圾回收算法 ( 内存优化总结 | 常见的内存泄漏场景 | GC 算法 | 标记清除算法 | 复制算法 | 标记压缩算法 )
文章目录 一. 内存优化总结 二. 常见的内存泄漏场景 三. 内存回收算法 四. 标记-清除算法 ( mark-sweep ) 五. 复制算法 六. 标记-压缩算法 一. 内存优化总结 内存泄漏原理 ...
- android如何查看cpu的占用率和内存泄漏
在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程度上很重要,经过查询资料,研究了一下,暂时了解到大概有以下几种方式,如果哪位高手有更好的办法,或者文中描 ...
- 手写Android性能监测工具,支持Fps/流量/内存/启动等
App性能如何量化: 如何衡量一个APP性能好坏?直观感受就是:启动快.流畅.不闪退.耗电少等感官指标,反应到技术层面包装下就是:FPS(帧率).界面渲染速度.Crash率.网络.CPU使用率.电量损 ...
- 【朝花夕拾】Android性能篇之(二)Java内存分配
前言 原文:[朝花夕拾]Android性能篇之(二)Java内存分配 在内存方面,相比于C/C++程序员,咱们java系程序员算是比较幸运的,因为对于内存的分配和回收,都交给 ...
- Android异常与性能优化相关面试问题-内存管理面试问题详解
内存管理机制概述: 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存. 回收机制:在系统内存不足的时候,系统有一 ...
- Android进程守护,让APP在系统内存中常驻(二)
昨天晚上写了用系统服务等方法来实现应用保活.今天写一下用提高app的进程等级来实现应用保活.想看直接调用系统方法保活应用的可以点击Android进程守护,让APP在系统内存中常驻(一)进行跳转. 一: ...
- Android 内存优化实操,定位内存问题
文章目录 一.内存泄漏定位 1.观察法: 2.使用内存分析工具 2-1.收集内存快照 2-2.hprof文件转换 2-3.Mat分析内存 二.内存抖动 三.优化内存空间 1.减少不必要的内存开销 2. ...
最新文章
- 4.11 一维到三维推广-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- MySQL文件后_MySQL误删除文件后,如何恢复
- zoj 1074 To the MAX
- 程序员在互联网公司和行业软件公司工作,有什么区别?
- 移动web开发-------meta
- 深度解读 | ElasticDL 深度学习框架简化编程,提升集群利用率和研发效率的秘诀...
- Shell中判断文件,目录是否存在
- 查看linux系统版本,内核,CPU,MEM,位数的相关命令
- 史上最细IDEA搭建基于SSM(springmvc+spring+mybatis)
- 05 基本数据类型+五大数据类型
- BZOJ1034: [ZJOI2008]泡泡堂BNB
- 基于单片机的有害气体/空气质量监测系统设计(#0422)
- CSR1010A05-IQQM-R首款单模单芯片蓝牙低功耗
- 如何利用Social Listening从社会化媒体中“提炼”有价值的信息?
- SIP音调通话调研结果
- DIY微信朋友圈截图制作生成小程序源码下载
- php如何配置gii,yii2 框架使用gii工具创建模块
- editplus里python技巧_editplus调试python
- Unity中进行网络通信:三:unity客户端和Unity服务端互相发消息
- matlab中函数参数和变量作用域
热门文章
- Docker学习总结(50)——Docker 微服务优雅关闭
- 消息中间件学习总结(13)——Kafka与RocketMQ的单机系统可靠性比较分析
- python抢红包random实现_python写红包的原理流程包含random,lambda其中的使用和见简单介绍...
- 富士康java应届生工资待遇_应届毕业生入职富士康渠道不一样,收入相差悬殊...
- java 给数组添加删除数_Java实现数组的添加、删除、查找(基础型)
- BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)...
- linux下安装rar解压包
- 301重定向错误(细心就不应该出错)
- oracle获取SID
- 中继链路,以太网通道,DHCP配置