1. 程式人生 > >關於onDestroy資源釋放的問題

關於onDestroy資源釋放的問題

Activity關閉的時候沒有呼叫onDestroy的情況:
1、activity被手機記憶體強制回收是不會呼叫
2、外部強制關閉程序,或者異常崩潰的時候

阿里開發規範也要求:
【推薦】不要在 Activity#onDestroy()內執行釋放資源的工作,例如一些工作執行緒的
銷燬和停止,因為 onDestroy()執行的時機可能較晚。可根據實際需要,在
Activity#onPause()/onStop()中結合 isFinishing()的判斷來執行。

網上有人寫的:
可以參考:
    private boolean isDestroyed = false;
    private void destroy()  {
        if (isDestroyed) {
            return;
        }
        // 回收資源
     isDestroyed = true;
    }


    @Override
    protected void onPause() {
        super.onPause();
        if (isFinishing()) {
            destroy();
        }
    }


    @Override
    public void onDestroy() {
        destroy();//需要在onDestroy方法中進一步檢測是否回收資源等。
    }




參考:
https://blog.csdn.net/Heijinbaitu/article/details/79153635

相關推薦

關於onDestroy資源釋放的問題

Activity關閉的時候沒有呼叫onDestroy的情況:1、activity被手機記憶體強制回收是不會呼叫2、外部強制關閉程序,或者異常崩潰的時候阿里開發規範也要求:【推薦】不要在 Activity#onDestroy()內執行釋放資源的工作,例如一些工作執行緒的銷燬和停

Android finish()自動回撥時機,Activity資源釋放邏輯放在onDestroy中一定合適嗎

首先看Google對finish()的描述, Call this when your activity is done and should be closed. The ActivityResult is propagated back

oracle for update鎖表資源釋放之kill -9和alter system kill session 'sid,serial#';

查詢 sele 操作 sid 操作系統 objects lte 需要 ssi 通過for update鎖表,通過操作系統方式和oracle方式終止進程方式 --查詢需要終止進程的情況,包括操作系統進程 select proc.sPID, sess.sid,

CocosCreator資源釋放總結

在用CocosCreator做專案的時候,如果專案過大,資源很多,然後,現在我們假設我們這樣設計架構: 1、開啟一個介面(預製體)的時候,有關這個預製體的圖片資源也用cc.loader載入進來; 2、關閉這個介面的時候,把有關的圖片用cc.loader.release釋放

QT區域性視窗資源釋放

視窗銷燬問題 當我們將一個A視窗作為父視窗,B視窗作為A視窗的子視窗,如果直接關閉B視窗,由於主視窗不銷燬,B視窗是不會被銷燬的,會一直佔記憶體。 方法一: 用widget舉例 QWidget *widget = new QWidget(this); widget-&g

[原始碼和文件分享]程式設計實現自定義資源釋放

背景 用VS2013寫一個釋放資源的小程式,除了自定義的資源外,還可以釋放其他型別的資源,只要是程式裡的資源,使用這個小程式,都可以實現。 這個小功能可以幫助我們把程式變得更簡潔,意思是說,如果你的程式額外需要一些DLL檔案、文字檔案、圖片檔案或是其它的音視訊檔案等等,你都可以把它們作為資源

unity資源釋放(AssetBundle和Asset)

本節主要敘述下,資源的釋放問題。 1、我們準備了下兩個資源,並且要做打包處理。 程式碼的程式碼,很簡陋,只是為了說明問題。程式碼如下: using System.Collections; using System.Collections.Gener

osgEarth的Rex引擎原理分析(三十四)新增資源釋放器_releaser子節點

目標:(十二)中的問題8 由(三十三)可知 對要移除的瓦片節點,放入資源釋放器(本質是osg::Drawable物件),釋放分配的opengl資源。並不是立即釋放,而是要等到osgUtil::SceneView::draw時最終呼叫資源釋放器的drawImplementation時進行釋放,

深刻理解C#中資源釋放

 首先,我們需要明確2個概念。 第一個就是很多人用.Net寫程式,會談到託管這個概念。那麼.Net所指的資源託管到底是什麼意思,是相對於所有資源,還是隻限於某一方面資源?很多人對此不是很瞭解,其實.Net所指的託管只是針對記憶體這一個方面,並不是對於所有的資源;因此對於St

JDBC異常處理和資源釋放問題

之前我們在介紹JDBC載入註冊驅動的時候說過有三種方式,是哪三種方式呢?我們再來看看 Class.forName("com.mysql.jdbc.Driver"); DriverManager.registerDriver(new com.mysql.jd

Unity中記憶體資源釋放總結

Unity記憶體釋放 問題主要考慮一下幾個方面: Resources 載入的資源需要釋放的時候呼叫 Resources.UnloadUnusedAssets(); WWW 載入資源之後最好呼叫WWW的Dispose介面 建立的RenderTexture必須呼叫Rel

JNI 資源釋放

JNI 程式設計實現了 native code 和 Java 程式的互動,因此 JNI 程式碼程式設計既遵循 native code 程式語言的程式設計規則,同時也遵守 JNI 程式設計的文件規範。在記憶體管理方面,native code 程式語言本身的記憶體管理機制依然要

C# 資源釋放及dispose、close方法

需要明確一下C#程式(或者說.NET)中的資源。簡單的說來,C#中的每一個型別都代表一種資源,而資源又分為兩類: 託管資源:由CLR管理分配和釋放的資源,即由CLR裡new出來的物件; 非託管資源:不受CLR管理的物件,windows核心物件,如檔案、資料庫連線、套

linux多執行緒-執行緒資源釋放

般來說,對一段執行程式碼進行加鎖然後解鎖,如下所示:   pthread_mutex_lock(&mutex);   //執行程式碼;   pthread_mutex_unlock(&mutex);   如果在執行程式碼這塊發生錯誤,有異常,導致這個執行緒異

C#嵌入dll到資源釋放的問題

http://blog.csdn.net/kikaylee/article/details/44536231  有些程式執行的時候,可能呼叫外部的dll,使用者使用時可能會不小心丟失這些dll,導致程式無法正常執行,因此可以考慮將這些dll嵌入到資源中,啟動時自動釋放。對於託管的dll,我們可以用打包

qt中關閉視窗資源釋放問題

針對QDialog物件,如果是棧上分配的,就不存在資源洩漏問題,但是當物件是new出來的,並且以區域性對像存在,當關閉時,視窗只是隱藏,資源是沒有釋放的,每次exec後者需要delete來釋放,另外一種方法是在QDialog中設定屬性: setAttribute(Qt::

Android WebView 開發 資源釋放,處理詳解

現在 app 與h5  結合的應用越來越多,這裡我們一般用 WebView 來顯示 但是 問題也挺多的,資源釋放,快取處理,等。 WebView 的基本使用 mWebview = (WebView) findViewById(R.id.webview); webview

httpclient4.5如何確保資源釋放

2018年07月18日更新:releaseConnection()這個方法已經不再推薦了,我用的httpclient4.5的jar包,不需要對request進行這個操作了,看官方文件解釋是更換了連線池管理類,最新的是:PoolingHttpClientConnectionMa

JDBC:JDBC資源釋放的細節問題

在上篇部落格介紹了jdbc的基本用法,其中有一段程式碼是這樣的: public static void main(String[] args) { Connection conn = null; Statement state = n

[VC++]成功實現資源釋放(原創+轉載)

       幾個月前我突然對資源釋放起了濃厚的興趣,於是在網上搜啊搜,內容幾乎被一篇文章這裡面的內容所壟斷了,由於文章上只給了部分原始碼,而其他的則需要10分CSDN分去下載,於是我就擱置了幾個月。       最近又想到這個東西,由於好奇心很重,我還是搜了一下,在http://www.cctry.com