我有一个android应用程序,有很多活动。有时会启动错误的活动。
通常,应用程序子类启动,然后启动活动(startact…android:name=“android.intent.action.main”,android:name=“android.intent.category.launcher”)
做一些工作,然后启动InitializeActivity。这会做一些工作,然后触发主显示活动(mainact)。前两个活动执行一些基本的初始化,包括在启动mainact的意图之前设置一个静态的“isinitialized”标志。
使用特定的意图(…activity.class指定)使用startActivity()启动活动,并在startActivity()之后调用finish()。
然而,有时会发生这样的事,我不知道为什么…
简而言之,应用程序被终止,当按下图标启动它时,它会直接跳到第三个(mainact)活动。这将导致应用程序检测到错误(IsInitialized标志为false)并停止:
使用图标正常启动应用程序:
…应用程序子类启动,也会触发一些工作线程
…StartActivity运行,然后激发InitializeActivity并完成
…InitializeActivity运行,然后设置IsInitialized并启动MainAct并完成
…MAINACT启动,运行正常
…按了主按钮,愤怒的小鸟跑了
…mainact先登录pause,然后登录top。
…应用程序子类拥有的工作线程继续定期执行工作和日志。
25分钟后,整个应用程序突然终止。这种观察是基于测井活动的结束,
时光流逝
点击主页按钮
按下应用程序的启动程序图标
调用应用程序子类oncreate并返回
*调用mainact.oncreate!(没有startact,没有initializeActivity)*
我错过了什么?
注意:由于这个问题添加了初始化标志。它设置在代码中启动主活动的唯一位置,并且仅在主活动中的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会记住这个应用程序中最后运行的活动是什么,并在用户返回应用程序时直接创建这个活动。
也许您可以在onCreate()Application方法(或MainAct的方法)中执行一些操作,以确保正确初始化所有内容。
顺便说一下,除非您真的需要,否则当用户不使用您的应用程序时,您不应该让工作线程做一些工作。根据你所做的,这可能会很快耗尽电池,或者让用户认为它可能会很快耗尽电池(更糟的是,因为用户会卸载你的应用!)
当用户退出应用程序时,还可以让应用程序完成所有活动,

09-10 13:01
查看更多