精华内容
下载资源
问答
  • android studio编译项目时提示内存溢出解决办法
    2020-05-15 15:36:35

    增加内存,在build.gradle中增加以下代码

    android {
        ...
        dexOptions {
            javaMaxHeapSize "4g"
        }
    }

     

    更多相关内容
  • package ...import android.annotation.SuppressLint;import android.app.Activity;import android.content.res.Resources;import android.os.Handler;import android.os.Message;import andro...

    package com.test.king.xmlparser;

    import android.annotation.SuppressLint;

    import android.app.Activity;

    import android.content.res.Resources;

    import android.os.Handler;

    import android.os.Message;

    import android.support.v7.app.AppCompatActivity;

    import android.os.Bundle;

    import android.util.Log;

    import android.view.View;

    import android.widget.TextView;

    import org.xmlpull.v1.XmlPullParser;

    import org.xmlpull.v1.XmlPullParserException;

    import java.io.IOException;

    import java.lang.ref.WeakReference;

    import java.util.ArrayList;

    import java.util.List;

    public class MainActivity extends AppCompatActivity {

    private static TextView tvContent;

    private static final int MSG_FINISH=0x0001;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    tvContent=findViewById(R.id.tv_content);

    }

    //内部类解决可能存在的内存溢出

    /*

    *、本文描述静态和非静态内部类的区别是非静态内部类持有外部类的引用。

    二、内部类实例的持有对象的生命周期大于其外部类对象,那么就有可能致使内存泄露。

    好比,要实例化一个超出activity生命周期的内部类对象,

    避免使用非静态的内部类。建议使用静态内部类而且在内部类中持有外部类的弱引用。

    *

    * */

    //静态内部类

    private static class MyHandler extends Handler {

    private final WeakReference mActivity;

    //构造方法

    public MyHandler(MainActivity activity) {

    mActivity = new WeakReference(activity);//对外部类的弱引用

    }

    @Override

    public void handleMessage(Message msg) {

    MainActivity activity = mActivity.get();

    if (activity != null) {

    switch (msg.what)

    {

    case MSG_FINISH:

    List contents=(List)msg.obj;

    //在主线程中显示

    for(String content:contents)

    {

    tvContent.append(content+"\n");

    }

    break;

    }

    }

    }

    }

    //new Handler对象处理消息,下文有引用

    private final MyHandler mHandler = new MyHandler(this);

    //警告

    /*

    private Handler handler=new Handler()

    {

    @Override

    //重写handleMessage方法处理消息

    public void handleMessage(Message msg) {

    switch (msg.what)

    {

    case MSG_FINISH:

    List contents=(List)msg.obj;

    //在主线程中显示

    for(String content:contents)

    {

    tvContent.append(content+"\n");

    }

    break;

    }

    }

    };*/

    public void parser(View view) throws IOException, XmlPullParserException {

    //常规方法

    /*

    List contents=getPullParserContent(getResources(),R.xml.words);

    for(String content:contents)

    {

    tvContent.append(content+"\n");

    }*/

    //解析XML可能须要耗费很长的时间,因此这里单独作一个子线程

    new Thread()

    {

    @Override

    //重写run方法

    public void run()

    {

    try {

    List contents=getPullParserContent(getResources(),R.xml.words);

    //完成工做,通知主线程

    Message msg=mHandler.obtainMessage();//也能够new Message

    msg.what=MSG_FINISH;

    msg.obj=contents;

    mHandler.sendMessage(msg);

    } catch (IOException e) {

    e.printStackTrace();

    } catch (XmlPullParserException e) {

    e.printStackTrace();

    }

    }

    }.start();

    }

    private List getPullParserContent(Resources res,int id) throws IOException, XmlPullParserException {

    List contents = null;

    String tagName;

    //XmlPullParser

    XmlPullParser parser = res.getXml(id);

    //Pull解析本质是SAX解析

    int eventType = parser.getEventType();

    while (eventType != XmlPullParser.END_DOCUMENT) {

    switch (eventType) {

    case XmlPullParser.START_DOCUMENT:

    Log.i("Test", "START_DOCUMENT");

    contents=new ArrayList();

    break;

    case XmlPullParser.END_DOCUMENT:

    break;

    case XmlPullParser.START_TAG:

    tagName = parser.getName();

    if (tagName.equals("word")) {

    String value = parser.getAttributeValue(0);

    contents.add(value);

    Log.i("Test", "START_TAG:" + tagName + " " + value);

    }

    break;

    case XmlPullParser.END_TAG:

    tagName = parser.getName();

    Log.i("Test", "END_TAG:" + tagName);

    break;

    }

    eventType = parser.next();

    }

    return contents;

    }

    }

    展开全文
  • android studio 分析内存溢出

    千次阅读 2017-10-31 17:03:55
    1. 手机为APP分配内存分析 系统会给每个APP分配固定的内存空间,不同手机厂商会根据手机的配置情况来对其进行调整。 内存大小包括3个属性: dalvik.vm.heapstartsize 设置堆...dalvik.vm.heapsize 设置了使用android

    1.      手机为APP分配内存分析

    系统会给每个APP分配固定的内存空间,不同手机厂商会根据手机的配置情况来对其进行调整。

    内存大小包括3个属性:

    dalvik.vm.heapstartsize   设置堆内存的初始大小

    dalvik.vm.heapgrowthlimit 设置一个标准的应用的最大堆内存大小

    dalvik.vm.heapsize       设置了使用android:largeHeap的应用的最大堆内存大小

     

    如何查看:

    1)      使用代码查看:

    ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
    int heapgrowthlimit = am.getMemoryClass();
    int heapsize = am.getLargeMemoryClass();

     

    2)      手机root,查看/system/ build.prop文件

    3)      使用adb获取

    adb shell getprop dalvik.vm.heapstartsize  应用启动后分配的初始内存

    adb shell getprop dalvik.vm.heapgrowthlimit单个标准应用程序最大内存限制

    adb shell getprop dalvik.vm.heapsize 单个dalvik虚拟机最大的内存限制

     

    2.      设置android:largeHeap = true (治标不治本)

    使用android:largeHeap="true"不需要特殊的权限,我们好像不用就白不用。多一点内存,就少了一点OutOfMemoryError的风险。这样只是治标不治本,也只是延迟了一下OOM的出现而已,我们应该从代码本身去查找,从根本上解决问题。
    所以在开发的时候,建议先不要使用android:largeHeap="true",如果是占用内存较大的应用,比如我们在机顶盒上开发的视频播放器应用,显示的图片都较大,而且播放视频本身也比较消耗内存,所以在应用开发完成,测试通过发布时再加上android:largeHeap="true"。

     

    3.      截止今日,RAM最大是多少?

    目前手机最新内存发展到8G但是市面没有普及,现在普及最多的是6G内存和4G内存。

     

    4.      ROM 、RAM、 运行时内存区别

    ROM通常指固态的存储器

    RAM类似于内存条

    运行时内存是指操作系统会将程序运行中申请的内存(虚拟内存)映射到RAM,让进程能够使用物理内存

     

    5.      Shallow Size、RetainedSize、Heap Size和Allocated Size

    Shallow Size: 对象本身占用的内存空间,不包含其引用的对象

    Retained Size: 对象本身的Shallow Size + 对象能直接或间接访问到的对象的Shallow Size,也就是说Retained Size就是该对象被gc之后所能回收内存的总和。

    Heap Size: 堆的大小(内存溢出限值)

    Allocated Size:堆中已分配的大小,即App应用实际占用的内存大小。

    6.      内存分析工具

    Android Monitor


    1.      操作APP + GC + 图表判断 + DUMP JAVA HEAP(适用于一般的内存泄露检测,效率高)

    1)  启动APP 观察内存变化

    2)  操作不同的功能 +

    3)  点击GC 观察内存变化

    4)  如果GC后内存无法被释放(现象:内存仍然递增),则该功能存在内存泄露

    5)  点击【DUMP JAVA HEAP】分析内存对象(内存大小、占比、引用等),定位内存泄露的位置


    monitor具体使用步骤,请参考其他同学的指导:http://blog.csdn.net/chengliang0315/article/details/53780758

    展开全文
  • Android Studio 3.X以上用R8编译,速度快,但是吃内存, 编译出现类似以下错误:android studioWhat went wrong: Execution failed for task 'Module:app:mergeDexDebug'.> java.lang.OutOfMemoryError (no error...

    Android Studio 3.X以上用R8编译,速度快,但是吃内存, 编译出现类似以下错误:

    android studio

    What went wrong: Execution failed for task 'Module:app:mergeDexDebug'.

    > java.lang.OutOfMemoryError (no error message)

    或者其他类似错误,merge dex等等错误

    解决办法:

    修改gradle文件: .gradle/gradle.properties照片那个配置:

    ## For more details on how to configure your build environment visit

    # http://www.gradle.org/docs/current/userguide/build_environment.html

    #

    # Specifies the JVM arguments used for the daemon process.

    # The setting is particularly useful for tweaking memory settings.

    # Default value: -Xmx1024m -XX:MaxPermSize=256m

    # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

    #

    # When configured, Gradle will run in incubating parallel mode.

    # This option should only be used with decoupled projects. More details, visit

    # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

    # org.gradle.parallel=true

    #Sun May 05 21:04:32 CST 2019

    systemProp.http.proxyHost=proxy.xxx.xxxx.net

    systemProp.https.proxyPort=8080

    systemProp.https.proxyHost=proxy.xxx.xxxx.net

    systemProp.http.proxyPort=8080

    org.gradle.jvmargs=-Xmx4g -XX\:MaxMetaspaceSize\=2g -XX\:+HeapDumpOnOutOfMemoryError -Dfile.encoding\=UTF-8

    展开全文
  • Android Studio也开始支持自动进行内存泄漏检查,并且操作起来也比较方便。我们大家都知道,系统是不可能将所有的内存都分配给我们的应用程序的。每个程序都会有可使用的内存上限,这被称为堆...
  • 第一种方法--及时回收bitmap内存:一般而言,回收bitmap内存可以用到以下代码if(bitmap!=null&&!bitmap.isRecycled()){bitmap.recycle();bitmap=null;}System.gc();bitmap.recycle()方法用于回收该bitmap所...
  • Android Studio内存泄漏分析工具汇总时间:2017-04-25来源:Android开发学习网在Android开发过程中,让人头疼的就是内存泄露问题了,很小的一个错误都会引起内存泄漏,那么如何分析内存泄漏呢?今天就和大家分享下...
  • Android开发中不免会遇到各类内存...android通常检测android内存泄漏都是使用android studio自带的Monitor工具结合mat,或者是使用第三方开源库工具:leakCanary.正则表达式可是这二者都不是十分完美的方式:Monitor工...
  • AndroidStudio打包编译内存溢出的处理

    千次阅读 2017-03-30 16:38:31
    如果造成内存溢出的情况的时候:我用了以下几种方式来解决了我电脑配置低 一样可以打包编译APK 第一种方法: 在AndroidStudio的build.properties文件下面添加 org.gradle.jvmargs=-Xmx4096m 然
  • 问题描述 通过Help->Change Memory Settings修改内存后,退出AS,然后发现再也启动不了了,...之所以在AS里面修改了内存后打不开AS,我猜是因为保存的文件内容有误,不信你可以点开studio64.exe.vmoptions那个文件,
  • android内存溢出解决

    2021-06-04 11:05:14
    1,解决使用Bitmap时出现的内存溢出1)及时的销毁,虽然,系统能够确认Bitmap分配的内存最终会被销毁,但是由于它占用的内存过多,所以很可能会超过java堆的限制。因此,在用完Bitmap时,要及时的recycle掉。recycle...
  • Android Studio 中自带Android Monitor监控内存溢出浅析一. android studio 默认是没有开启android Monitor ,所以打开Android Montior会发现不可点击 二. 在Tools–>Android–>Enable ADB 开启Android Montior,如...
  • Android studio运行时报错,方法,类找不到,或者JVM内存溢出解决方案
  • Android检测内存溢出工具--leakcanary

    千次阅读 2019-03-18 11:39:38
    转载文章:https://www.jianshu.com/p/70b8c87ea877
  • 对于内存泄漏,在Android中如果不注意的话,还是很容易出现的,尤其是在Activity中,比较容易出现,下面我就说下自己是如何查找内存泄露的。 首先什么是内存泄漏? 内存泄漏就是一些已经不使用的对象还存在于内存之...
  • 内存溢出相信做过编程的人都知道一二,这里说Android 内存溢出的问题:、问题描述:Android下的相机在独自使用时,拍照没有问题,通过我们的代码调用时,也正常,但是更换了不同厂商的平板,ROM由Android4.0变成了...
  • 解决内存溢出的方法大体如下几种: 一:在内存引用上做些处理,常用的有软引用、强化引用、弱引用 应用的强弱顺序是强、软、弱、和虚。 软引用是主要用于内存敏感的高速缓存。在jvm报告内存不足之前会清除所有的软...
  • Android Studio的Profiler分析内存泄漏
  • 如果Androidstudio运行起来非常卡顿、缓慢,很可能是因为初始分配的内存不够导致卡顿。查看当前分配的Heap 总大小以及使用状况可以在studio中设置展示。具体位置Settings -> Appearance 页里,打开Show memory ...
  • 除了LeakCanary和mat可以帮我们排查内存泄漏,Profiler也可以,功能强大,可以进行内存、绘制、网络、电量的分析。 通过view-》Tool Window -》Profiler打开工具,选择对应的进程,选择MEMORY 然后点击Recorder按钮...
  • 一般使用Android Studio生成 JavaDoc会有三个问题:1、空指针异常Tools --> Generate JavaDoc -->打开对话框活,在"Other command line arguments"输入“-bootclasspath /Users/用户名/sdk/platforms/android-...
  • 我正在构建一个应用程序,该应用程序允许用户单击列表中的图像并将该图像加载到其他布局中。 然后,我希望用户能够在该图像上进行手指绘画,但是我不知道如何处理。 此类是在图像中加载毕加索的地方,其他所有内容都...
  • Androidstudio安装目录下的bin目录里找到: studio64.exe.vmoptions文件 (类似如下) -Xms512m -Xmx4096m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:...
  • Android中的内存溢出

    2021-01-28 18:31:38
    内存溢出概念:通俗一些将,就是内存不足,安装软件的内存大于了手机的内存,有时候软件会自动关闭,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存...
  • android.view.Window $ Callback android.view.Window.getCallback()” android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2977)在android.app.ActivityThread.handleLaunchActivity...
  • Mac 版Android studio 分配内存设置方法

    千次阅读 2018-12-30 11:07:45
    如果Android studio运行起来非常卡顿,有时可能是因为初始分配的内存不够用了。 查看当前分配的Heap 总大小以及使用状况可以在studio中设置展示。 具体位置Preference -> Appearance 页里,打开Show memory ...
  • 我正在使用opencv在android studio上的android上开发功能提取/匹配应用程序。我按照以下步骤使用本机代码以使用SIFT或SURF算法。.我已经复制了文件夹(armeabi,armeabi-v7a, ... etc)到jniLibs文件夹,这是我的主要...
  • android studio 报错 Error:Execution failed for task ':pen:dexDebug'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process  'command 'C:\Program Files
  • 内存抖动、内存泄漏、内存溢出(OOM)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,491
精华内容 1,396
关键字:

androidstudio内存溢出