【问题标题】:Activity running in background after back pressed后按后在后台运行的活动
【发布时间】:2017-05-27 06:20:28
【问题描述】:

我正在开发一个广泛使用动画的 Android 应用程序。我面临的问题是,如果用户不小心或故意按下后退按钮,前一个活动会启动,这很好,但不再可见的活动继续在后台运行。 Toasts 正在显示,媒体正在播放。现在简单的解决方案是通过 onBackPressed() 中的引用检查任何正在运行的动画或正在运行的媒体并相应地停止。有没有其他方法可以完全杀死该活动?因为我没有为该活动中的每个动画保留参考。似乎没有任何效果。请帮忙。

【问题讨论】:

  • 那么您希望该活动在后台停止工作吗?
  • 是的。即使我看不到该活动,它也会继续在后台运行。正在显示祝酒词,并从该活动中听到声音。
  • onBackPressed() 在用户按下 BACK 时被调用。除非您已覆盖它,否则默认行为会调用 finish(),这应该会完成您的 Activity。如果您在Activity 中启动了额外的线程或其他后台处理,您将需要自己终止这些事情。请给我们一些相关的代码。

标签: android animation android-activity onbackpressed


【解决方案1】:

Activity 不是在后台运行,而是在前台运行。如果不查看代码,很难说是什么导致了这个问题,但可能是你启动的音乐服务。

【讨论】:

  • 实际上它是一个相当大的代码。但我想多解释一点。我有一个 MediaPlayer 数组。在 onBackPressed() 中,如果我停止当前正在播放的媒体,代码将继续在后台执行,最终导致播放下一个媒体并显示敬酒。由于活动不可见,显然我看不到动画。好吧,我想在这里提一下,我还没有覆盖 onStop()。我应该这样做吗?
【解决方案2】:

请转至activity lifecycle

你应该根据activity的生命周期来处理动画和媒体播放

【讨论】:

    【解决方案3】:

    如果有帮助,试试这个,

    从堆栈中完成活动

    toolbar.setNavigationOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
    

    你也可以从 Manifest 试试

    <activity android:name=".LoadingScreen" android:noHistory="true" ... />
    

    【讨论】:

    • 请分享Logcat
    • 或尝试按照我在答案中提到的那样从清单中处理它。并评论上面的代码。
    • @Joy 有什么进展吗?
    • 没有。从那时起,我一直在努力解决它。但是没有运气:(如果我仍然设法在 onBackPressed() 中停止当前正在播放的媒体,代码将继续在后台运行并开始播放下一个媒体,显示敬酒。清单技巧不起作用。我应该分享 logcat 吗?
    • LogCat 太大,无法在评论中发布。该怎么办?其实我是新来的。
    【解决方案4】:

    要手动终止活动,您可以使用以下方法,您想要终止活动

    完成();

    如有任何疑问,请告诉我!

    【讨论】:

    • 没有帮助....之前的活动开始了,但不可见的活动继续在后台执行。
    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多