日常开发的你一定没有处理的OOM

这里转载了一款文章,点击观看。详细的介绍了日常开发中经常使用的一些单例,线程,Handler一类的OOM的防止和处理。

内存优化很棒的一篇文章

1.单例产生的内存溢出
2.handler产生的内存溢出
3.线程造成的内存溢出。AsyncTask
4.非静态内部类创建静态实例内存溢出。对外部的一个引用。
5.webview
6.资源未关闭。

webview的解决方案:

其中一种就是使用getApplicationgContext作为参数构建WebView,然后动态添加到一个ViewGroup中,最后退出的时候调用webView的销毁的函数,虽然也达到了防止内存溢出的效果,但是在有些网页弹出时候需要记住密码的对话框的时候,会出现Unable to add window -- token null is not for an application 的错误,所以这里采用的解决办法是通过把使用了WebView的Activity(或者Service)放在单独的进程里。然后在检测到应用占用内存过大有可能被系统干掉或者它所在的Activity(或者Service)结束后,调用android.os.Process.killProcess(android.os.Process.myPid());,主动Kill掉进程。由于系统的内存分配是以进程为准的,进程关闭后,系统会自动回收所有内存。

public class MainActivity5 extends AppCompatActivity {

 private WebView mWebView;

@Override

 protected  void onCreate(Bundle savedInstanceState) {
    super .onCreate(savedInstanceState);
    setContentView(R.layout.activity_web);
    mWebView = (WebView) findViewById(R.id.web);
     mWebView.loadUrl(
          "http://www.cnblogs.com/whoislcj/p/5720202.html");
 }

 @Override
protected void onDestroy() {
    destroyWebView();
    android.os.Process.killProcess(android.os.Process.myPid());
    super .onDestroy();
}

 
  
private void destroyWebView() {
 if (mWebView != null ) {
     mWebView.pauseTimers();
     mWebView.removeAllViews();
     mWebView.destroy();
    mWebView = null ;
  }
 }

 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,790评论 25 709
  • Android Studio JNI流程首先在java代码声明本地方法 用到native关键字 本地方法不用去实现...
    MigrationUK阅读 14,086评论 7 123
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 11,024评论 2 51
  • 你知道大花马齿苋吗?他们都叫它太阳花,因为它只有在有阳光的时候才开花,晴天有阴云它都会合上花门。感觉现在的自...
    籽紟阅读 1,495评论 0 0
  • 2046年6月9日 今天再一次从天空之城出发,与上一次不同,这次大家是一起出动了。 出发之前,想在办公室收拾点有用...
    初霁713阅读 1,384评论 0 2