jia*_*ily 41 android android-manifest
我有这个AndroidManifest.xml文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1" android:versionName="1.0.0.0721"
android:process="com.lily.process" package="com.lily.test">
<provider android:authorities="com.lily.test"
android:name="com.lily.test.provider"
android:process="com.lily.process">
</provider>
Run Code Online (Sandbox Code Playgroud)
"android:process"作为清单标记和提供者标记添加,我知道如果它被添加为提供者标记,则提供者可以在"com.lily.process"过程中运行.但是当它作为清单标签编写时,它的用法是什么?我尝试过,但并非所有组件都可以在它识别的过程中运行.
Car*_*arl 113
我同意没有多少人会发现android:process作为应用程序标签的属性很有用.但是,我发现它作为activity标签的一个属性很有用.
活动的目的android:process是指定您的活动应在具有特定名称的流程中启动.该名称的选择既可以用于隔离其自己的进程中的活动(与启动它的进程不同),也可以用于强制它在单个进程中与其他使用相同名称的活动共存.
根据开发指南(http://developer.android.com/guide/topics/manifest/activity-element.html):
"如果分配给此属性的名称以冒号(':')开头,则在需要时创建一个专用于应用程序的新进程,并在该进程中运行活动.如果进程名称以小写字符开头,该活动将在该名称的全局进程中运行,前提是它有权这样做.这允许不同应用程序中的组件共享进程,从而减少资源使用."
我最近发现这个属性对于解决我在启动应用程序的帮助活动时遇到的问题非常有用,在某些情况下,该应用程序非常接近仍适用于某些设备的16MB堆限制.在这些情况下,启动其帮助活动会使我的应用程序超过限制,从而导致力量关闭.
通过使用android:process标记,我能够指定我的帮助活动应该在它自己的单独进程中启动.这个进程有自己的16MB堆,并没有计入我的主应用程序堆启动它.这会永久性地完全阻止我的应用程序耗尽堆空间并在启动帮助时崩溃.
如果您的启动应用程序具有包名称
com.mycompany.mymainapp
Run Code Online (Sandbox Code Playgroud)
因此,如果您使用,则分配一个与该字符串相同的进程名称
android:process=":myhelp"
Run Code Online (Sandbox Code Playgroud)
在已启动的活动中,将为其分配进程名称
com.mycompany.mymainapp:myhelp
Run Code Online (Sandbox Code Playgroud)
并且该进程将具有自己的独立进程ID,您可以查看该进程ID(例如在DDMS中).
至少,这是我的经历.到目前为止,我的测试是在运行CM6(Android 2.2.1)的旧Moto Droid上进行的,配置为具有16MB的堆限制.
在我的情况下,因为我不希望用户将帮助视为与我的应用程序分开,所以我包括了
android:excludeFromRecents="true"
Run Code Online (Sandbox Code Playgroud)
属性以防止帮助活动出现在最近的应用程序(长按主页)列表中.我也包括在内
android:taskAffinity="com.mycompany.mymainapp.HelpActivity"
Run Code Online (Sandbox Code Playgroud)
其中HelpActivity是帮助活动的名称,用于在自己的任务中隔离活动
我还补充说:
android:launchMode="singleInstance"
Run Code Online (Sandbox Code Playgroud)
防止每次用户调用帮助时创建此应用程序的多个实例.
我还添加了标志:
Intent.FLAG_ACTIVITY_NEW_TASK
Run Code Online (Sandbox Code Playgroud)
用于启动帮助活动的Intent.
根据您对android:process属性的使用情况,可能需要也可能不需要这些参数.
考虑到在为Android设备开发时遇到内存限制的频率,在某些情况下,使用一种技术可以让您将应用程序的某些部分分解为单独的进程,每个进程都有自己的堆,这似乎是一个很棒的礼物.这样做可能存在隐藏的危险,我还没有考虑或经历,但到目前为止,在我的特定情况下如此好.
@Carl
可能存在隐患:
参考:http://developer.android.com/training/articles/memory.html#MultipleProcesses
现在,只需在UI中显示一些文本,该过程的大小几乎增加了两倍,达到4MB.这导致了一个重要的结论:如果您要将应用程序拆分为多个进程,则只有一个进程应该负责UI.其他进程应该避免任何UI,因为这将快速增加进程所需的RAM(特别是一旦开始加载位图资产和其他资源).一旦绘制UI,可能很难或不可能减少内存使用.
android:process需谨慎使用
\n\n(引用自以下链接)
\n\nAndroid 的一个鲜为人知且看似未记录的行为是应用程序的每个进程都有自己的 Application 实例。
\n\n因此,如果您有一个在不同进程中运行的服务,则调用 startService() 将为您的应用程序初始化 Appplication 类。
\n\n更多信息\xe2\x80\x8a\xe2\x80\x94\xe2\x80\x8a Android 中的启动服务调用应用程序 onCreate
\nandroid:process 和shareduserid 可用于在包之间传递资源。就我而言,这现在很方便:)
源代码示例: https: //github.com/ikust/hello-sharedprocess
| 归档时间: |
|
| 查看次数: |
41737 次 |
| 最近记录: |