Android计时器加弱引用
2016-03-07 12:11
537 查看
package com.example.ttt; import java.lang.ref.WeakReference; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.Toast; public class MainActivity extends Activity { /** * 网页链接超时时长(秒) */ private static final int TIME_OUT =5; private MyHandler mHandler; /** * * @author dell * *延伸:什么是WeakReference? *WeakReference弱引用,与强引用(即我们常说的引用)相对,它的特点是: *GC在回收时会忽略掉弱引用,即就算有弱引用指向某对象,但只要该对象没有被强引用指向(实际上多数时候还要求没有软引用,但此处软引用的概念可以忽略), *该对象就会在被GC检查到时回收掉。对于下面的代码,用户在关闭Activity之后,就算后台线程还没结束,但由于仅有一条来自Handler的弱引用指向Activity, *所以GC仍然会在检查的时候把Activity回收掉。这样,内存泄露的问题就不会出现了。 * *弱引用-->随时可能会被垃圾回收器回收,不一定要等到虚拟机内存不足时才强制回收。要获取对象时,同样可以调用get方法。 *简单来说,就是只要使用了WeakReference,GC在检查的时候就会回收 */ private static class MyHandler extends Handler { private WeakReference<MainActivity> mActivity; public MyHandler(MainActivity activity) { mActivity = new WeakReference<MainActivity>(activity); } @Override public void handleMessage(Message msg) { MainActivity activity = mActivity.get(); if (activity == null) { return; } switch (msg.what) { case 1: Log.d("myf", "=="); // 第一种情况 break; case 2: // 第二种情况 Toast.makeText(activity, "有", 3).show(); break; default: // 其他 break; } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler = new MyHandler(this); CountdownThread countdownThread=new CountdownThread(); countdownThread.start(); } /** * 倒计时线程类 * @author dell * */ class CountdownThread extends Thread { /** * 判断该线程是否继续 */ private boolean isTrue = true; /** * 停止该线程 */ public void stopRun() { this.isTrue = false; } public void run() { int time = 1; while (time <= TIME_OUT && isTrue ) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } time++; Message msg = new Message(); msg.what = 1; mHandler.sendMessage(msg); if (time >= TIME_OUT) { Message msg2 = new Message(); msg2.what = 2; mHandler.sendMessage(msg2); } } } } }
相关文章推荐
- Android学习:Activity
- Android Studio 我常用快捷键
- Android Activity:四种启动模式,Intent Flags和任务栈
- Android学习笔记----json
- android 源码编译流程
- #android# 广播静态注册 动态注册
- android AsyncTask的参数理解
- 两种Android判断view是否部分被遮挡(或者移出屏幕)的方法
- 参考:xUtils 包含了很多实用的android工具
- Android 原生BottomSheet 介绍及坑
- Android设置透明、半透明等效果
- android 源码 log
- android自定义控件:根据声音波动的声波控件
- 第一个Android 例子
- android如何调用@hide和internal API
- Android开发之静态注册实现开机启动
- 第4章 Android IDA pro使用
- [置顶] android开发之edittext弹出输入框遮挡住文字。解决方法
- Android proguard混淆注意事项
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)