小编Iva*_*lev的帖子

Android内存管理粒度 - 活动还是流程?

我看到不一致的文档和讨论有关Android内存不足时发生的情况以及操作系统重新声明内存的步骤.更具体地说,Android会以活动/片段或整个过程的粒度杀死吗?

例如,如果活动B在活动A前面启动(并且两个活动都是同一个应用程序/进程的一部分),活动A可以被操作系统杀死,而活动B位于前台,用户正在与活动B交互(假设:屏幕保持打开,当前应用程序保持在前台,没有发生方向更改)?

这个苏答案(在Android团队在谷歌的戴安娜Hackborn),从2011年表明,Android的杀死在流程的粒度,并不是一项活动.

在对Android开发者页面重新创建一个活动,它说:

如果系统当前已停止且未长时间使用或前台活动需要更多资源,系统也可能会破坏您的活动,因此系统必须关闭后台进程才能恢复内存.

注意歧义:"系统必须关闭后台进程 ".

onSaveInstanceState的Android Developer页面上,它说:

例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态

在阅读了这些以及许多其他文档页面和在线讨论后,尚不清楚正确的答案是什么.

我也有关于片段的相同问题:由于内存不足而导致背景片段被杀死,而整个过程是否被杀死?

android android-fragments android-activity android-memory

7
推荐指数
1
解决办法
568
查看次数

将环境变量设置为较大的值 - >"参数列表太长"

在bash脚本中,我将环境变量设置为包含100万个字符的字符串.我这样做:

export LG=XXXXXXX # ... 1 million X's
Run Code Online (Sandbox Code Playgroud)

在此之后,我能够毫无问题地回复它,即

echo $LG
Run Code Online (Sandbox Code Playgroud)

但是,我在脚本内部尝试运行的任何其他无关命令都会因"参数列表太长"错误而失败.例如:

cat randomfile.txt
/bin/cat: Argument list too long
Run Code Online (Sandbox Code Playgroud)

我已阅读其他帖子,建议使用xargs解决此类问题,但我没有成功.如果我使用除echo之外的任何命令,那么即使在我设置它之后我实际上没有使用$ LG变量,我也会得到"参数列表太长"错误.当然我想使用$ LG变量,但即使我在设置后不使用它也会发生错误.

任何提示将不胜感激,谢谢!

编辑:

我试图解决的整体问题是这样的:

我有一个文本文件,我需要保持尽可能小(即几MB).此文本文件包含一组封装在特定网络协议内的消息(即标头,消息长度,消息本身).消息本身可以是长度为100万或更多的字符串.因此,为了保持原始文件的大小,而不是在文件中包含大型消息的多个副本,我使用映射.也就是说,如果我在消息字段中看到字母A,那么我使用sed来查找并替换A和100​​万个X. 像这样:

cat file.txt | sed "s/A/$LG/g"  # Replace A with 1 million X's
Run Code Online (Sandbox Code Playgroud)

我最终会在一个(非常慢的)模拟器中运行它,所以我需要这个操作尽可能少地完成.换句话说,像awk这样的实用程序使用一个行程数为100万的循环来动态生成100万个X.这样的实用程序太慢了.这就是我认为环境变量解决方案最好的原因.

linux bash shell environment-variables

3
推荐指数
1
解决办法
1786
查看次数