- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们一直在开发一个应用程序,它有一个下拉仪表板,允许用户在整个应用程序中导航。导航不是很标准,因为几乎每个 Activity 都可以访问此菜单。使用菜单打开 Activity 玩了一会儿后,堆栈开始越来越大。
所有这些 Activity 都包含 ListView ,其中包含多个 ImageView ,每个约占 3 MB。如果用户玩得足够多并在堆栈上创建了超过 25 个 Activity ,则会发生这种情况:
我期望系统在抛出 OutOfMemoryError 之前自动终止堆栈中最旧的 Activity ...
为了确保操作系统不会终止旧 Activity ,我创建了一个每次分配 1mb 的测试应用程序。猜猜看:行为是一样的,但会抛出 outofmemerror:
问题是:我们如何告诉 Android 操作系统允许它在需要时取消分配 Activity 及其资源,这样我们就不会收到“很遗憾,您的 Activity 已停止”。对话?
概念验证
package com.gaspar.memorytest;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MemoryTestActivity extends Activity {
/** Called when the activity is first created. */
private byte[] mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(MemoryTestActivity.this, MemoryTestActivity.class);
startActivity(i);
}
});
mData = new byte[1*1024*1024];
}
}
最佳答案
I was expecting the system to kill the oldest activities in the stack automatically BEFRORE the OutOfMemoryError was thrown
Android 不会这样做。 Android 终止进程以为其他进程释放系统内存。它不会以类似的方式涉及应用程序内的内存使用。
How can we tell the Android OS that it is allowed to deallocate activities and its resources if needed so we don't get the "Unfortunately, your activity has stopped." dialog?
你不能。
相反,您需要将应用程序设计为使用更少的 Activity ,或者每个 Activity 使用更少的资源。例如,您可以通过 FLAG_ACTIVITY_REORDER_TO_FRONT
“回收”现有 Activity 实例,或者(正如 Tornquist 先生所指出的),您可以自己手动finish()
Activity 。
After playing for a while opening activities using the menu, the stack starts to grow and grow.
您可能应该在这些菜单项上使用 FLAG_ACTIVITY_REORDER_TO_FRONT
,这样您就可以在任务中推进现有 Activity ,而不是每次都创建新 Activity 。
关于当内存不足时,Android 不会从堆栈中杀死 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11616575/
所以我正在为考试复习,并在 SQL 河(或荒地)中撞到了一块大石头 我制作了以下表格并插入了以下数据: create table Permissions ( fileName VARCHAR(
我有一个使用 maxWidth 定义的 jqueryui 对话框。 $("#myDialog").dialog({ autoOpen: false, width: 'a
注意:我遗漏了不相关的代码 所以我目前正在研究 CCC 1996 P1,这个问题的全部目的是能够计算一个整数输入是完美数、不足数还是充数。我上面列出的代码可以工作,但是我认为它太慢了。该代码会迭代每个
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 Go 和 Redis 开发 API。问题是RAM使用不足,我找不到问题的根源。 TL;DR 版本 有数百/数千个哈希对象。每个 1 KB 的对象(键+值)占用大约 0.5 MB 的 RAM
在我的 GCE Kubernetes 集群上,我无法再创建 pod。 Warning FailedScheduling pod (www.caveconditions.com-f1be467e3
当我尝试在EKS Fargate群集上安装指标服务器时,它抛出错误: 0/4 nodes are available: 4 Insufficient pods. 按照以下说明从此处安装指标服务器:ht
遍布this document Apple 提到 iOS 在某些情况下会终止应用程序,最常见的原因似乎是释放一些 RAM。这会导致未实现状态恢复的应用程序出现问题——用户正在处理和暂时离开的一些内容可
尝试处理一个10分钟的音频文件时出现以下错误。我刚刚开始使用Google Cloud产品,所以我是唯一访问此资源的人。我怎么可能超出配额?配额设置为其默认值,我认为我没有任何限制。还有其他原因吗? 我
R 语言让我感到困惑。实体有模式和类,但即使这样也不足以完全描述实体。 这个answer说 In R every 'object' has a mode and a class. 所以我做了这些实验:
我在 west-1 有一个 Openshift v3 项目。在其中,我有一个运行良好的应用程序,但在 GitHub 提交代码中非常下游的内容后,该应用程序停止工作。问题在于制作 pod: No nod
我在 west-1 有一个 Openshift v3 项目。在其中,我有一个运行良好的应用程序,但在 GitHub 提交代码中非常下游的内容后,该应用程序停止工作。问题在于制作 pod: No nod
在 how-do-i-access-the-stackoverflow-api-from-mathematica我概述了如何使用 SO API 让 Mathematica 制作一些有趣的顶级回答者声誉
所以在 GKE 上,我有一个 Node.js app,每个 pod 使用大约:CPU(cores): 5m, MEMORY: 100Mi 但是我只能为每个 Node 部署 1 个 pod。我使用的是
我正在使用 async.eachOfSeries 超过 300 个数组并请求一些 GA api,它工作正常但有时我会收到错误.. UnhandledPromiseRejectionWarning:错误
我正在尝试在 AWS ec2 上托管的 kubernetes 集群上使用 mr3 设置配置单元。当我运行命令 run-hive.sh 时,Hive 服务器启动,并且 master-DAg 被初始化,但
创建订阅时有时会出现以下错误: Insufficient tokens for quota 'administrator' and limit 'CLIENT_PROJECT-100s' of ser
我是一名优秀的程序员,十分优秀!