即使启动了新活动,也使应用程序保持在后台

jwir3

我有一个利用启动屏幕和选择屏幕的应用程序,如以下清单所示:

<application
    android:name="com.example.CoolApp"
    android:label="@string/app_name"
    android:icon="@drawable/app_icon_debug"
    android:theme="@style/Theme.NoBackground">
    <activity
        android:name="com.example.Splash"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:noHistory="true"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="coolappscheme"/>
        </intent-filter>

    </activity>
    <activity
        android:name="com.example.ChoiceActivity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden"/>
</application>

初始屏幕显示约2秒钟,然后ChoiceActivity通过以下代码导航至

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  ... some stuff for showing the Splash screen ...

  Thread mythread = new Thread() {
    @Override
    public void run() {
      try {
        .. animation stuff for fading in ...

        while (splashActive && ms < splashTime) {
          if(!paused)
            ms=ms+100;
          sleep(100);
        }
      } catch(Exception e) {
      } finally {
        Intent intent = new Intent(Splash.this, ChoiceActivity.class);
        startActivity(intent);
      }
    }
  };

现在,显然,此代码存在很多问题(从作者为什么决定使用单独的Thread而不是。的原因开始AsyncTask。但是,如果用户执行以下操作,请暂时将这些内容放在一边:

  1. 启动应用程序并查看启动屏幕。
  2. 将应用程序强制进入后台(例如,用户接听电话,或者可能只是点击“主页”按钮)。

然后,当Thread完成操作(即finally到达块并Intent创建)时,将ChoiceActivity创建的,但也将应用程序置于前台。我想禁用此行为。也就是说,我希望活动被加载,但是应用程序保留在后台。如果那不可能,那么我希望应用程序将新的Activity(// any // new Activity)的加载延迟到恢复应用程序之后。

我怎样才能做到这一点?

西姆卡丹

活动本应在前台运行。.有一个给定的生命周期,该生命周期基于用户与应用程序的交互方式。因此,您实际上不应该尝试“在后台启动活动”,因为这没有任何意义。.您可以做的是以某种方式更改活动对外部事件的反应。您的活动中有一个新的布尔字段,每次在onPause()中将其设置为false,在onResume()中将其设置为true ...

然后,您可以在启动新活动时检查它,而实际上只有在为true时才启动它。否则,只需将字段设置为true,然后在onResume()中将字段设置为true时启动活动。

另外,您还应考虑到,后台活动可能会随时被系统杀死。活动应释放所有系统资源,并在其进入​​后台时停止其工作。只有这样,您才能确保您的应用不会进入不可预测的状态。对于后台任务,您应该使用服务,这些服务基本上是“没有活动的活动”。 UI”(我不敢这么说)-您的应用程序的某些部分在后台运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

保持在后台时,iOS 应用程序返回到 rootViewController

即使应用程序在后台,如何保持后台计时器在本机运行

在后台启动应用程序

即使应用程序在后台/退出,如何使CameraManager.AvailabilityCallback保持不变

iOS应用程序如何在后台无限期地保持TCP连接的活动?

在后台,iOS和Android中使音乐应用程序保持活动状态?

即使在睡眠或重新启动后,仍在后台连续运行IOS应用程序

即使应用程序在后台运行功能

即使应用程序在后台,如何发出通知?

保持iOS应用程序永远在后台运行

无法在后台使用应用程序保持GPS处于活动状态,或者在前台或后台使用应用程序无法读取位置

在UbuntuGNOME 14.04中在后台添加启动应用程序

如何在后台启动BREW应用程序?

新打开的应用程序在后台打开

即使应用程序被销毁,如何使应用程序在后台工作?

即使强制停止了应用程序,也要重新启动服务;关闭应用程序后,仍要在后台运行服务。

即使应用程序只是放在后台,如何确保应用程序每次打开时都会重新启动?安卓

如果我的应用程序在后台运行,为什么Android OS不会为singleTop活动创建新实例?

从警报启动特定活动-即使关闭应用程序

应用程序在后台访问PHPhotoLibrary

在后台运行的WPF应用程序

使Web应用程序在后台运行

应用程序在后台时的BroadcastReceiver

应用程序在后台时的 OnClickListener

在嵌入式Linux上启动后自动在后台启动Java应用程序

获取实时位置更新,即使应用程序不在后台(iPhone)

如何制作即使在后台模式下仍可以运行的计时器应用程序

即使应用程序在后台,Time.unscaledDeltaTime仍在计数

即使关闭应用程序,在后台在Dart和Flutter中运行定期任务