【问题标题】:Stop application from going to foreground when an activity is started启动活动时阻止应用程序进入前台
【发布时间】:2015-11-18 18:52:55
【问题描述】:

所以,我有一个带有启动屏幕的应用程序,一旦加载完成,它就会启动另一个活动。当用户在加载过程中点击主页按钮时,应用程序会转到后台,然后在该活动启动后返回前台。有没有办法阻止这种情况发生?

【问题讨论】:

  • 简单的解决方案,但不是答案:没有启动画面。更严重的是,您可以在开始下一个活动之前检查您的活动状态。或者,您可以在飞溅停止时取消加载。
  • 我宁愿没有启动画面,但我需要掩盖修复用户位置的初始延迟。我想开始活动,但在后台没有它弹回前台。我希望有一个简单的意图标志来做到这一点,而不是以编程方式干预活动的状态。
  • 在后台启动一个活动?这听起来更像是一项服务。
  • 它不是服务,只是一个正常的活动,但我希望用户能够返回到应用程序并已经加载它,同时也防止应用程序在用户加载后弹回点击主页按钮。
  • 从设计的角度来看,Google 建议您在应用程序运行时执行位置检测等后台任务——例如,在后台任务执行其操作时继续允许用户使用应用程序。启动画面实际上更多地用于加载对于在应用程序上显示任何内容必不可少的资产。因此,您最好放入进度条或“确定位置”对话框或其他任何内容,以便用户可以在应用程序中,但要知道他们需要等待片刻。这也可以解决您的上述问题。

标签: android android-intent splash-screen android-homebutton


【解决方案1】:

两件事:

首先,确保您删除了onPause 中对定位服务的引用。我假设您使用的是 Google 的 API 客户端。如果你不是,你真的应该是。所以在onPause,确保你取消注册监听器:

@Override
public void onPause()
{
    // Tear down Google API Client.
    if (googleApiClient != null)
    {
        if (googleApiClient.isConnected())
        {
            // Turn off location polling.
            LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient, this);
        }

        // Avoid leaks by making sure callbacks get unregistered.
        googleApiClient.unregisterConnectionCallbacks(this);
        googleApiClient.unregisterConnectionFailedListener(this);
        googleApiClient.disconnect();
    }
}

但是:我认为你在考虑这个问题的解决方案。为什么有两个活动?为什么不是一个,并有一个“等待状态”,直到你得到位置修复?你的等待状态可以是任何东西。或者如您所说的全屏启动(使用RelativeLayout 并堆叠视图)。当你得到修复后,淡出飞溅。

然后将该位置存储到savedInstanceState 包中。当您的 Activity 状态发生变化时,您将知道不再显示启动画面。

【讨论】:

  • 谢谢,将启动画面覆盖在主要活动之上似乎是正确的方法,并感谢您提供有关使用 GoogleAPIClient 的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
相关资源
最近更新 更多