android 内存 举例
来源:互联网 发布:stc单片机iap应用 编辑:程序博客网 时间:2024/06/07 09:34
一,有关static的内存问题。
首先先看一个例子
public class MainActivity extends Activity{private static boolean test = false;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d("owen","test = "+test);test = true;}@Overridepublic void onBackPressed(){super.onBackPressed();finish();}}
上面的例子,在第一次运行时,静态变量test的值由false变成了true,当按back键退出程序后,再进入,test的值还是true,说明test并没有被GC回收。
当Activity退出时,Activity的静态变量是存在的,因为静态变量是属全局变量,静态变量是整个应用程序的公共变量(即使你这个地方写的是私有),所以Activity消毁时,静态变量是不会清除的。但当什么时候才会清除呢,上面说过静态变量是整个应用程序的,所以只有当各个应用程序的进程消毁时,静态变量才会毁,所以以下写法可以退出。
@Overridepublic void onBackPressed(){super.onBackPressed();android.os.Process.killProcess(android.os.Process.myPid());}
那么此时就引导出一个有关内存方面的问题,如果有一个静态变量,持有了一个耗资源的对象,那么就算是activity退出,这个耗资源对象也不会被回收,这就造成了严重的内存泄露。这个耗资源可以是context对象,这种问题隐藏的很深,不容易被发现。
public class MainActivity extends Activity{private static Drawable mDrawable;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);TextView textView = new TextView(this);if(mDrawable == null){Resources resources = this.getResources(); mDrawable = resources.getDrawable(R.drawable.ic_launcher);}textView.setBackgroundDrawable(mDrawable);setContentView(textView);}}
上面就有内存泄露的情况。
0 0
- android 内存 举例
- Android性能优化篇(二),内存泄露的举例分析
- linux 内存共享举例
- 数组内存分配举例
- 内存泄露分析举例
- 内存文件映射应用举例
- Lua内存泄露情况举例
- [转载]Lua 内存泄露举例
- qt 创建共享内存举例
- android BroadcastReceiver应用举例
- Android-- ArrayAdapter用法举例
- Android BroadcastReceiver应用举例
- Android DatePickerDialog应用举例
- Android Dialog使用举例
- Android Dialog使用举例
- android style举例
- android常用动画举例
- Android Dialog 使用举例
- Android layoutInflater连载带入一步一步深入了解View(一)
- 机器学习的三个准则
- 由ORA_ROWSCN想到的
- sockaddr_in初始化函数
- C# try catch finally
- android 内存 举例
- 前台获取json数组
- .vimrc的autocmd用法
- 建立数据库本地索引的C++实现源代码
- Apache ActiveMQ 负载均衡
- C#多线程
- PowerPC上电复位的过程描述
- 自我承诺~自我约束~
- C++变量