android开发 怎么释放activity的全部内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android开发 怎么释放activity的全部内存相关的知识,希望对你有一定的参考价值。

假如现在有三个activity,分别是main,a 和b .
a和b都是需要很大内存的,在main中打开a或b,在a或b中直接按返回键,或者直接调用finish,回到main后通过update heap观察刚才打开的activity占用的资源可以很快释放,如果是setResul后再调用finish回到main,发现内存被释放的事件要稍微久一些。
第二个问题,在main中打开a,然后在a中startActivity打开b,然后a.finish,这个时候观察a的内存并没有释放。如果在b中调用finish返回main后,a和b的内存就会被释放掉。
参考技术A 在Activity销毁之前释放资源,以及所有可能导致内存泄漏的引用。 参考技术B 写一个集合,用来存放打开的所有的Activity,再写一个方法,用来退出应用的时候调用,退出时销毁这个集合 参考技术C 是因为activity里的图片多导致的APP退出后手机变卡吧?

android没有提供这类方法,网上有人说在activity结束的时候setContentView为空,但是我测试过,是没有用处的,有种比较粗暴的方法。
退出APP的时候直接调用System.exit(0)或者restartPackage,我是这么做的。本回答被提问者和网友采纳
参考技术D ingly with a sense of re

android开发 修改了数据库后怎么更新

我创建了一个学生表,做了两个Activity ,一个查看学生信息,一个修改学生信息,先打开查看的Activity,看到了其中的学生信息,然后去修改Activity修改学生信息,再去查看Activity看学生信息发现数据没有变化,请问怎么让数据随着修改而改变

给你提供几种方法吧:

    在查看学生信息的那个Activity里面,重写onResume方法,在这个方法里面获取数据来显示视图,无论是这个activity新创建,还是从后台不可见转为前台,都会走这个生命周期。

    数据显示页面监听数据的变化来更新输入。如果管理数据使用的是 ContentProvider管理的话,直接使用ContentObserver来监听相应的Uri即可,如果不是这种方式的话,可以在操作学生数据库的时候发送一个广播,然后现实学生页面的Activity去监听这个广播,收到广播后去更新界面。

    如果是从查看信息界面进入的修改信息界面,那么可以使用startActivityForResult方法启动信息修改界面,信息修改后调用setResult方法返回修改后的数据给信息显示界面,信息显示界面重写onActivityResult方法来获取新的学生信息,从而更新界面

    暂时就想到这几种方法吧,希望对你有帮助~

参考技术A

使用监听者模式,监听数据库的变化,然后改变取值。

    private void registerObserver()   
        getContentResolver().registerContentObserver(  
                ContactsContract.Contacts.CONTENT_URI, true, mObserver);  
        getContentResolver().registerContentObserver(  
                CallLog.Calls.CONTENT_URI, true, mObserver);  
      
  
    private void unregisterObserver()   
        getContentResolver().unregisterContentObserver(mObserver);  
      
  
    private ContentObserver mObserver = new ContentObserver(new Handler())   
  
        @Override  
        public void onChange(boolean selfChange)   
            isContactChanged = true;  
          
    ;

参考技术B 可以使用更新数据库的语句。
SQLiteDatabase.update(String table,ContenValues values,String whereClausee,String[] whereArgs)追问

我就是用了update语句把数据库给改的,改了以后去看学生信息没有变化啊!!

追答

是不是语句出现了问题,再好好看一下

追问

是不是跟Activity的生命周期有关?感觉重新打开查看Activity应该是onRestart(),但加入了查询语句还是没变化!!

以上是关于android开发 怎么释放activity的全部内存的主要内容,如果未能解决你的问题,请参考以下文章

Android开发 Activity生命周期详解

Android开发常见的Activity中内存泄漏及解决办法

Android开发常见的Activity中内存泄漏及解决办法

Android Activity间动画跳转

android app用啥开发好

android对应生命周期中应该释放哪些资源