Android - 有时会启动错误的活动

Mes*_*one 5 android restart android-activity

我有一个Android应用程序,有许多活动.有时会开始错误的活动.

通常,一个Application子类启动,然后启动活动(StartAct ... android:name ="android.intent.action.MAIN",android:name ="android.intent.category.LAUNCHER")做一些工作,然后启动InitializeActivity.这有些工作,然后触发我的主显示活动(MainAct).前两个活动进行一些必要的初始化,包括在为MainAct启动intent之前设置静态" isInitialized "标志.

使用特定意图(指定了... activity.class)使用startActivity()启动活动,并在startActivity()之后调用finish().

然而,这是有时会发生的事情,我不知道为什么......

简而言之,应用程序被终止,当按下图标启动它时,它会直接跳转到第三个(MainAct)活动.这会导致应用程序检测到错误(isInitialized标志为false)并停止:

  • 使用图标正常启动应用程序:
  • ...应用程序子类启动,也会激活一些工作线程
  • ... StartActivity运行,然后触发InitializeActivity并完成
  • ... InitializeActivity运行,然后设置isInitialized并启动MainAct并完成
  • ... MainAct启动,运行正常
  • ...主页按钮被击中,愤怒的小鸟被运行
  • ... MainAct登录onPause,然后onStop.
  • ... Application子类拥有的工作线程继续定期执行操作和日志.
  • 25分钟后,整个申请被突然杀死.这种观察是基于伐木活动的结束,
  • 时光流逝
  • 主页按钮命中
  • Launcher ICON被迫为该应用程序
  • 调用应用程序子类onCreate并返回
  • *调用MainAct.onCreate!(没有StartAct,没有InitializeActivity)*

我错过了什么?

注意:由于此问题,添加了initialize标志.它设置在启动主活动的代码中的唯一位置,并且仅在主活动中的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>
Run Code Online (Sandbox Code Playgroud)

Gui*_*rie 2

应用程序因内存不足而被终止的事实对用户来说应该是透明的。这就是为什么当应用程序被终止时,Android 会记住该应用程序中最后运行的 Activity 是什么,并在用户返回应用程序时直接创建该 Activity。

\n\n

onCreate()也许你可以用你的Application(或你的)方法做一些事情MainAct)方法中执行某些操作,以确保一切都正确初始化。

\n\n

顺便说一句,除非您确实需要,否则当用户不使用您的应用程序时,您不应该让工作线程执行某些工作。根据您的操作,这可能会快速耗尽电池电量,或者让用户认为它会快速耗尽电池电量(这更糟糕,因为用户会卸载您的应用程序!)

\n\n

您还可以让应用程序在用户退出应用程序时完成每个活动,

\n