Android中的軟引用(SoftRefrerence)和弱引用(WeakReference)
在Android開發中,基本上很少有用到軟引用或弱引用,這兩個東東若用的很好,對自己開發的程式碼質量的提高有很大的幫助。若用的不好,會坑了自己。所以,在還沒有真正的去了解它們之前,還是慎用比較好。
下面將通過兩個Demo來結識軟引用和弱引用在開發中的運用。
一. WeakReference:防止記憶體洩漏,要保證記憶體被虛擬機器回收。
下面以一個時間更新的Demo來說明弱引用的運用。
1. main.xml檔案程式碼如下:
- <?xmlversion="1.0"encoding="utf-8"?>
-
<
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
- <com.stevenhu.wrt.DigitalClock
- android:layout_width="match_parent"
-
android:layout_height
- android:orientation="horizontal">
- <TextViewandroid:id="@+id/time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="50pt"
- />
-
<TextViewandroid:id="@+id/ampm"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="25pt"
- />
- </com.stevenhu.wrt.DigitalClock>
- </LinearLayout>
- package com.stevenhu.wrt;
- import java.lang.ref.WeakReference;
- import java.text.DateFormatSymbols;
- import java.util.Calendar;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.database.ContentObserver;
- import android.graphics.Canvas;
- import android.os.Handler;
- import android.provider.Settings;
- import android.text.format.DateFormat;
- import android.util.AttributeSet;
- import android.view.View;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- publicclass DigitalClock extends LinearLayout {
- // 12小時、24小時制
- privatefinalstatic String M12 = "h:mm";
- privatefinalstatic String M24 = "kk:mm";
- private Calendar mCalendar;
- private String mFormat;
- private TextView mDislpayTime;
- private AmPm mAmPm;
- private ContentObserver mFormatChangeObserver;
- privatefinal Handler mHandler = new Handler();
- private BroadcastReceiver mReceiver;
- private Context mContext;
- public DigitalClock(Context context, AttributeSet attrs) {
- super(context, attrs);
- mContext = context;
- // TODO Auto-generated constructor stub
- }
- @Override
- protectedvoid onFinishInflate() {
- // TODO Auto-generated method stub
- super.onFinishInflate();
- mDislpayTime = (TextView) this.findViewById(R.id.time);
- mAmPm = new AmPm(this);
- mCalendar = Calendar.getInstance();
- //設定時間顯示格式
- setDateFormat();
- }
- @Override
- protectedvoid onAttachedToWindow() {
- // TODO Auto-generated method stub
- super.onAttachedToWindow();
- //動態註冊監聽時間改變的廣播
- if (mReceiver == null) {
- mReceiver = new TimeChangedReceiver(this);
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_TIME_TICK);
- filter.addAction(Intent.ACTION_TIME_CHANGED);
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
- mContext.registerReceiver(mReceiver, filter);
- }
- //註冊監聽時間格式改變的ContentObserver
- if (mFormatChangeObserver == null) {
- mFormatChangeObserver = new FormatChangeObserver(this);
- mContext.getContentResolver().registerContentObserver(
- Settings.System.CONTENT_URI, true, mFormatChangeObserver);
- }
- //更新時間
- updateTime();
- }
- @Override
- protectedvoid onDetachedFromWindow() {
- // TODO Auto-generated method stub
- super.onDetachedFromWindow();
- if (mReceiver != null) {
- mContext.unregisterReceiver(mReceiver);
- }
-
if (mFormatChangeObserver !=
相關推薦
Android中的軟引用(SoftRefrerence)和弱引用(WeakReference)
在Android開發中,基本上很少有用到軟引用或弱引用,這兩個東東若用的很好,對自己開發的程式碼質量的提高有很大的幫助。若用的不好,會坑了自己。所以,在還沒有真正的去了解它們之前,還是慎用比較好。 下面將通過兩個Demo來結識軟引用和弱引用在開發中的運用。
Android開發優化方案之軟引用和弱引用的使用
物件的引用分為四種級別,為了能更加靈活的控制物件的生命週期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用。 本篇主要介紹軟引用和弱引用的使用和區別 一、軟引用:SoftReference 如果一個物件只具有軟引用,那麼如果記憶體空間足夠,垃圾回收器就不會回收它;如
java中的軟引用和弱引用
在java 中除了基本資料型別之外,其他都是引用資料型別,而引用資料型別又分類四種 強引用 指向通過new得到的記憶體空間的引用叫做強引用,比如 String a = new String(“123”),其中的a就是一個強引用,它指向了一塊記憶體為123的堆空間。平時我們
Android面試篇之軟引用和弱引用的區別
軟引用所指向的物件要進行回收,需要滿足兩個條件: ● 沒有任何強引用 指向 軟引用指向的物件(記憶體中的Person物件) ● JVM需要記憶體時,即在丟擲OOM之前 即SoftReference變相
軟引用和弱引用在安卓開發中的使用
用處一:解決Handler可能造成的記憶體洩露。 原因分析:為什麼Handler可能造成記憶體洩露。 當使用內部類(包括匿名類)來建立Handler的時候,Handler物件會隱式地持有一個外部類物件(通常是一個Activity)的引用,不然你怎麼可能通過Handler來操
JAVA中的強引用、軟引用(SoftReference)、弱引用(WeakReference)和幽靈引用(PhantomReference)
JAVA語言提供了四種引用型別: 強引用、軟引用(SoftReference)、弱引用(WeakReference)和幽靈引用(PhantomReference),與引用密切相關的,還有一個引用佇列ReferenceQueue。 1、強引用 (1)回收時機:強引用不會被GC
Android 軟引用和弱引用的使用分析
本文目錄 1. 引用型別 Java 語言的引用型別有這幾種 強引用 軟引用 SoftReference 弱引用 WeakReference 強引用只要有被引用,虛擬機器 gc 的時候是不會清理的,我們平時寫的程式碼沒有特別指明什麼引用累心,都
[Android] Android開發優化之——使用軟引用和弱引用
Java從JDK1.2版本開始,就把物件的引用分為四種級別,從而使程式能更加靈活的控制物件的生命週期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用。這裡重點介紹一下軟引用和弱引用。如果一個物件只具有軟引用,那麼如果記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體
Java中的強引用和弱引用
style 關系 term handle ren soft obj jsb false 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://blog.csdn.net/xuri24/article/details/81114944 一、強引用
android 使用handle警告,,存在記憶體洩漏的危險,使用靜態內部類和弱引用的方式解決。
Handle警告的原因:handle定義為內部類,會持有外部類的引用,如果外部類結束,handle因為執行耗時操作沒有結束,並持有外部類的引用,導致外部類佔用的記憶體不能釋放。 解決辦法:handle定義為靜態內部類,handle對於外部類的元件和方法的操作藉助弱引用來實現。 public
java軟引用和弱引用
/** * 引用處理 * * @作者 light-zhang * @時間 2018年11月9日 * @product mall-utils * @package cc.zeelan.common.retus * @file CatReference.java * */ public
Java之"強引用、軟引用 和弱引用"
思考:Java中為何會有引用的概念? 思路:在Java裡,當一個物件M被建立的時候,它就被放在heap裡。當GC執行時,如果發現沒有任何引用指向物件M,M就會被回收,用以騰出記憶體空間。 總結:如果一個物件被回收,需要滿足兩個條件: 沒有任何引用指向它 觸發GC(
硬引用和軟引用區別 強引用和弱引用區別
1.強引用 本章前文介紹的引用實際上都是強引用,這是使用最普遍的引用。如果一個物件具有強引用,那就類似於必不可少的生活用品,垃圾回收器絕不會回收它。 當記憶體空 間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體
Java中的值傳遞和"引用"傳遞
引言 學習過C語言的同學都很清楚在c中呼叫方法的引數有值傳遞和引用傳遞兩種方式。關於值傳遞和引用傳遞網上有許多的部落格寫的很好,這裡我就不解釋了。附上一篇:值傳遞和引用傳遞。但是使用過Java的同學可能知道,如果我們按照C語言的引數傳遞方式來理解Java中引數傳遞的話,有時候可能會和自己預料的答案有所出入。
weakref模組和弱引用
正是因為有引用,物件才會在記憶體中存在。當物件的引用數量歸零後,垃圾回收程式會把物件銷燬。 弱引用不會增加物件的引用數量,引用的目標物件稱為所指物件(referent)。常作快取使用。 一般我門會使用weakref包的集合(WeakKeyDictionary, WeakValueDictionary, W
強引用和弱引用
強引用是指向記憶體申請一段儲存空間,進行儲存的引用型別的物件的引用,如下建立一個強引用, object obj = new object();obj = 10; 在物件獲得的分配記憶體空間中不僅僅存放了物件的資訊,還存放著該物件被引用的次數。在建立一個強引用時,預設的引用次數為 1,之後每引用一
IOS學習—強引用(__strong)和 弱引用(__weak)
在Objective-C的ARC模式中, id obj1 = [[NSObject alloc] init]; 這裡雖然沒有顯示的宣告為__strong,但是Objective-C預設宣告的一個物件就為__strong,即: id obj1 = [[N
強引用和弱引用(__strong和__weak)
初學者乾貨 在OC ARC模式下開發: id objcA =[ [NSObject alloc] init]; 預設宣告的一個物件就為__strong強引用,等價於: id __strong objcA =[ [NSObject alloc] init]; 注:在強引用
python3學習筆記之 強引用和弱引用
python中,名字和物件的關聯是強引用的關係,會增加引用計數,進而影響目標物件的生命週期。所以 弱引用就是在保留引用的前提下,不增加計數,不阻止目標被回收。但不是所有的型別都支援弱引用(如 int、str、list、tuple。。。等)這裡要提到解構函式 __del__當物
C++中的物件指標和物件引用
在C++中,可以說明指向類的資料成員和成員函式的指標。 指向資料成員的指標格式如下: <型別說明符><類名>::*<指標名> 指向成員函式的指標格式如下: <型別說明符>(<類名>::*<