【发布时间】:2011-10-04 03:14:50
【问题描述】:
我有一个包含许多活动的 Android 应用。有时会启动错误的活动。
通常,Application 子类启动,然后启动 Activity (StartAct... android:name="android.intent.action.MAIN", android:name="android.intent.category.发射器") 做一些工作,然后启动 InitializeActivity。这会做一些工作,然后触发我的主要显示活动 (MainAct)。前两个活动进行了一些基本的初始化,包括在 MainAct 的意图启动之前设置静态“isInitialized”标志。
Activity 使用特定意图(...activity.class 指定)通过 startActivity() 启动,并在 startActivity() 之后调用 finish()。
但是,有时会发生这种情况,我不知道为什么......
简而言之,应用程序被终止,当按下图标启动它时,它直接跳转到第三个 (MainAct) 活动。这会导致应用检测到错误(isInitialized 标志为假)并停止:
- 使用图标正常启动应用:
- ...应用程序子类启动,同时启动一些工作线程
- ...StartActivity 运行,然后触发 InitializeActivity 并完成
- ...InitializeActivity 运行,然后设置 isInitialized 并启动 MainAct 并完成
- ...MainAct 启动,运行正常
- ...点击主页按钮并运行愤怒的小鸟
- ...MainAct 记录 onPause,然后是 onStop。
- ...Application 子类拥有的工作线程继续定期执行工作并记录。
- 25 分钟后,整个应用程序突然被杀死。此观察基于日志记录活动的结束,
- 时光荏苒
- 主页按钮点击
- 为应用按下启动器图标
- 应用子类onCreate被调用并返回
- *MainAct.onCreate 被调用! (没有 StartAct,没有 InitializeActivity)*
我错过了什么?
注意:由于这个问题,添加了初始化标志。它设置在代码中唯一启动主Activity的地方,并且只在主Activity的onCreate中勾选。
[每个请求] 清单文件(略有编辑)。请注意,此处的服务当前未使用。
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.yyy.zzz"
android:versionCode="1" android:versionName="1.0.1">
<application
android:icon="@drawable/icon_nondistr"
android:label="@string/app_name"
android:name=".app.MainApp"
android:debuggable="true">
<activity
android:label="@string/app_name"
android:name=".app.StartAct" android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="Html"
android:name=".app.HtmlDisplayAct"/>
<activity
android:label="Init"
android:configChanges="orientation"
android:name=".app.InitializeActivity" android:theme="@android:style/Theme.NoTitleBar"/>
<activity
android:label="MyPrefs"
android:name=".app.PrefsAct" />
<activity
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
android:name=".app.MainAct">
</activity>
<service
android:name=".app.svcs.DataGetterService" />
</application>
<uses-sdk android:minSdkVersion="4"/>
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="com.android.vending.CHECK_LICENSE" />
<uses-feature
android:name="android.hardware.location.network"
android:required="false" />
</manifest>
【问题讨论】:
-
你能显示你的清单文件吗...接缝那边的问题..
-
这是一个非常古老的帖子,但我很高兴你发布了它,我很高兴我找到了它。否则我无法相信我真的在体验 Android 对我的应用所做的事情。不幸的是,唯一的答案是相当有问题的——我必须将 kludgy 代码添加到大约 20 个 Activity 类中才能捕获所有可能的情况。你有没有找到更好的解决方案?
标签: android android-activity restart