标签: android-memory

应用可以使用的最大RAM量是多少?

我对这个关于Android操作系统内存管理的问题很好奇,所以我希望对这个主题有一个非常详细的答案.

我想知道的是:

  • Android应用程序(不是系统应用程序)可以使用的最大内存量(以兆字节 / 占总RAM的百分比)是多少?
  • Android版本之间有什么区别吗?
  • 有关设备制造商的任何差异吗?

最重要的是:

  • 当系统确定应用程序在运行时可以使用多少RAM时(假设每个应用程序的内存最大值不是静态数字),它是什么/它取决于什么

到目前为止我所听到的(直到2013年):

  • 早期的Android设备每个应用上限为16MB
  • 后来这个上限增加到24MB或32MB

是什么让我很好奇:

这两个限制都非常低.

我刚刚下载了Android任务管理器来检查我的设备RAM.我注意到有些应用程序使用大约40-50兆字节的RAM,这比上面提到的最大RAM使用量(比如说32 MB)要多得多.那么Android如何确定应用程序可以使用多少RAM?应用程序如何超出此限制?

此外,我注意到当使用大约30-40兆字节时,我的一些应用程序崩溃(被系统杀死?)和OutOfMemoryException.另一方面,我的手机上运行的应用程序使用100 MB以上的一段时间后(可能由于内存泄漏)不会崩溃或被杀死.因此,在确定可以节省多少RAM时,显然还取决于应用程序本身.这怎么可能?(我用带有768 MB RAM的HTC One S进行了测试)

免责声明:我不以任何方式与Android任务管理器应用程序相关联.

memory android memory-management out-of-memory android-memory

140
推荐指数
3
解决办法
6万
查看次数

android.view.InflateException:二进制XML文件行#2:错误膨胀类<unknown>

我正在开发一个简单的应用程序 刚刚完成主屏幕.如果方向变化超过两次,则抛出错误并且应用程序强制关闭.

我的活动代码:

public class PasswordActivity extends Activity implements OnClickListener {
Button login;  
Button forgot;
Button register;  

private static final String PREFERENCES = "prefs";
private static final String PREFERENCES_NAME = "pref_name"; 
SharedPreferences settings;
private Cursor c;

@Override 
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); 
    login=(Button)findViewById(R.id.login_login);
    login.setOnClickListener(this);
    register=(Button)findViewById(R.id.login_register);
    register.setOnClickListener(this);

}
public void onClick(View v) {
}

}
Run Code Online (Sandbox Code Playgroud)

我的Xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"    
android:background="@drawable/listpic"
>

<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="5dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
>  
<TextView 
 android:layout_width="fill_parent"
 android:layout_weight="0.75"
 android:layout_height="wrap_content"
 android:text="@string/login_user_name" …
Run Code Online (Sandbox Code Playgroud)

android android-emulator android-memory

22
推荐指数
1
解决办法
5万
查看次数

在销毁时释放特定活动的内存

我有一个启动器Activity加载和调整大位图的大小,因为它是打开时的背景.

每当按下后退按钮时,Activity就是destroyed.但我认为记忆尚未公布.

当我打开应用程序时,点击后退按钮再次打开它(反复),我会得到一个OutOfMemoryError.

我这个新手的问题,对不起,但我不知道我怎么释放每当记忆Activitydestroyed

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);

    //MARK - movingBackgroundImageView
    movingBackgroundImageView = (ImageView) findViewById(R.id.movingBackgroundImageView);
    movingBackgroundImageView.setColorFilter(Color.argb(255, 255, 255, 255));
    movingBackgroundImageView.setScaleType(ImageView.ScaleType.MATRIX);
    movingBackgroundImageView.setAlpha(0.28f);

    prepareBackgroundAnimation();
}

private void prepareBackgroundAnimation() {

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

    screenWidth = displaymetrics.widthPixels;
    screenHeight = displaymetrics.heightPixels;

    movingImageHeight = displaymetrics.heightPixels;
    movingImageWidth = 1920.0 / 1080.0 * movingImageHeight;

    bitmapImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.moving_background_image);
    scaledBitmap = bitmapImage.createScaledBitmap(bitmapImage, (int) movingImageWidth, (int) movingImageHeight, false);
    movingBackgroundImageView.setImageBitmap(scaledBitmap);

    backgroundImageInBeginning …
Run Code Online (Sandbox Code Playgroud)

android out-of-memory android-memory android-studio android-bitmap

20
推荐指数
2
解决办法
2万
查看次数

如何获得Android应用程序的最低硬件要求

我与一些团队成员开发了一个Android应用程序,通过移动设备收集现场数据.

现在这个应用程序将投入生产.所以普通人会使用这个应用程序.我们还需要创建一个文档来解释我的Android应用程序中引入的所有内容以及运行此应用程序的最低硬件要求是什么,没有错误.

现在我怎么知道什么是最低硬件要求.

基本上在我的约四的应用TextField,三Spinner,Date,EditText和两个ImageView.

所以我怎么知道运行这个应用程序的最低内存要求是什么.

我已经在其中一个移动设备中尝试了这个应用程序,其中几乎所有内存都被其他应用程序使用.我的应用程序无法捕获照片.当我删除一些应用程序,然后我的应用程序工作正常.

这就是为什么我想知道运行我的应用程序的最低内存要求是什么.

android android-hardware android-memory

16
推荐指数
2
解决办法
2万
查看次数

保存到SD卡作为文本文件

   stopWriting = (Button) findViewById(R.id.save);
   stopWriting.setOnClickListener(new OnClickListener() {

       @SuppressLint("SdCardPath")
    public void onClick(View v) {
           // stop recording the sensor data
           try {

               myFile = new File("/sdcard/SensorData/" + txtData.getText() + ".txt");
               myFile.createNewFile();

               sData = new FileOutputStream(myFile);
               myOutWriter = new OutputStreamWriter(sData);
               myBufferedWriter = new BufferedWriter(myOutWriter);
               myPrintWriter = new PrintWriter(myBufferedWriter);

               //if(myFile != null )//stopFlag = mSensorManager.cancelTriggerSensor(null, null);
               Toast.makeText(getBaseContext(), "Done", Toast.LENGTH_SHORT).show();
           } catch (Exception e) {
               Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
           }
       }
   });
Run Code Online (Sandbox Code Playgroud)

我试图将陀螺仪数据保存到txt文件,但它不保存.如果有人发现问题,请帮我纠正.

java android save android-sdcard android-memory

13
推荐指数
2
解决办法
4万
查看次数

当尝试使用google plus登录时,Android应用程序崩溃,没有任何异常

我正在开发一个应用程序,它有一个带有google plus登录按钮的LoginActivity.我已经在google的api控制台中启用了Google+ API并创建了一个Oauth帐户.

这是我的代码的相关部分:

活动类声明:

    public class LoginActivity extends Activity implements OnClickListener,
            ConnectionCallbacks, OnConnectionFailedListener, PlusClient.OnAccessRevokedListener {

  private PlusClient mPlusClient;
  private ConnectionResult mConnectionResult;
  private static final int REQUEST_CODE_SIGN_IN = 2
Run Code Online (Sandbox Code Playgroud)

的onCreate:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        mPlusClient = new PlusClient.Builder(this, this, this)
                .setActions("http://schemas.google.com/AddActivity").build();
Run Code Online (Sandbox Code Playgroud)

的onClick:

     public void onClick(View view) {
        Utils.LOGD("onClick - View = " + view);

        if (view.getId() == R.id.sign_in_button) {
            Utils.LOGD("onClick  : mPlusClient status  = " + mPlusClient);
            if (mPlusClient.isConnected()) {
                Utils.LOGD("onClick - mPlusClient is connected");
                Toast.makeText(this, "you …
Run Code Online (Sandbox Code Playgroud)

debugging android google-api android-memory google-play-services

13
推荐指数
1
解决办法
4009
查看次数

Android Studio 2.1.2'转储Java堆'无效(Mac OS El Capitan)

我试图使用Android Studio内存监视器中的"dump java heap"按钮获取.hprof文件,但由于某种原因没有生成.hprof文件.有人知道为什么吗?分配跟踪工作正常.

android-memory android-studio

13
推荐指数
1
解决办法
461
查看次数

启用了largeHeap的位图回收

在启用largeHeap选项之前,我正在处理大型位图,它几乎消耗了应用程序可用的整个内存,并且通过导航回收它并加载新的内存几乎可以在完整的堆上运行.但是,当某些操作需要更多内存时,应用程序崩溃.所以我启用largeHeap=true了更多的内存.

但这样做有一个意外的行为,它看起来像recycle()位图的方法不工作的大部分时间,并在58MB工作的内存(并超过有时抛出的应用程序OutOfMemoryException)现在消耗内存成倍而且还在不断增加(目前测试我确实来了231Mb分配的内存),预期的行为是内存管理继续工作,应用程序将不会使用超过60Mb.

我怎么能避免这种情况?还是有效地回收位图?

编辑:实际上,我OutOfMemoryError在设备上分配超过390Mb的内存时给了它一个.读取GC_*日志显示只有GC_FOR_ALLOC有时会释放3.8Mb,但几乎从未在其他GC运行中释放过某些内容.

android android-image android-memory android-largeheap

10
推荐指数
1
解决办法
4611
查看次数

以编程方式解析内存快照hprof索引文件

我正在尝试以编程方式分析hprof文件.在android-sdk中使用hprof-conv工具我生成了一堆com.your.package.index文件.

如何以编程方式解析这些.index文件?

我想在dominator树上运行一些自定义分析,这很容易通过MAT(Eclipse的Memory Analyzer)手动完成,但希望以自动方式完成.

android hprof eclipse-mat android-memory

10
推荐指数
1
解决办法
625
查看次数

删除片段后内存不会释放

我有一个FragmentRecyclerView.

在这里RecyclerView,我偶尔可以下载并显示图像(加载GlideImageView.

因此,当我打开时Fragment,使用过的内存有时会从大约30MB跳到大约100MB甚至更多.

Activity持有Fragment完成之后,内存不会释放.它和以前一样.

我检查滑翔文档,显然我们不必担心释放BitmapsRecyclerView.这是一个很大的问题,因为应用程序经常因为OOM而崩溃.

Fragment删除后我应该如何正确处理释放内存?

编辑:另一个观察

我注意到的另一件事是,如果我完成了Activity,然后Activity再次开始相同.内存将跳回一段时间然后再回到100MB,这让我相信在Fragment再次启动之前内存已被清除.

android android-fragments android-memory android-glide

10
推荐指数
1
解决办法
3344
查看次数