【问题标题】:App closing event in AndroidAndroid中的应用关闭事件
【发布时间】:2014-05-08 06:13:08
【问题描述】:

有什么方法可以知道您的应用程序正在运行吗? 我想在 Android 应用刚刚关闭时运行一段代码。任何建议将不胜感激。

【问题讨论】:

  • 尝试在主活动的 onDestroy() 中执行您的代码...
  • 我已经尝试过 onDestroy。但是当我从启动器菜单关闭应用程序时,没有这样的事件调用。
  • 是的,您可以检查您的设备上正在运行的应用程序是什么,它会给出这些应用程序的包标识符名称。
  • 你可以识别它,但我认为首先实现 onDestroy() 方法。那你能告诉我你的具体要求是什么吗?
  • 我正在开发应用程序。它应该在关闭应用程序之前访问网络服务。

标签: android performance


【解决方案1】:

经过这么长时间,现在只是回答我自己的问题。当用户关闭应用程序时,该过程将终止,恕不另行通知。不保证会调用 onDestroy。仅当您显式调用 finish() 时。

【讨论】:

    【解决方案2】:

    我建议您创建一个自定义应用程序类并注意存储应用程序的可见性,无论它是否在后台运行。显然,如果您不这样关闭应用程序

    How to close Android application?

    看看这个,这样你就不会从后台关闭它并像这样执行可见性检查。

    public class MyApplication extends Application {
    
    public static boolean isActivityVisible() {
    return activityVisible;
    }  
    
    public static void activityResumed() {
    activityVisible = true;
    }
    
    public static void activityPaused() {
    activityVisible = false;
    }
    
     private static boolean activityVisible;
    }
    

    这就是您将应用程序类注册到清单文件的方式。

    <application
    android:name="your.app.package.MyApplication"
    android:icon="@drawable/icon"
    android:label="@string/app_name" >
    

    并像这样覆盖这两个方法。

    @Override
    protected void onResume() {
    super.onResume();
    MyApplication.activityResumed();
    }
    
    @Override
    protected void onPause() {
    super.onPause();
    MyApplication.activityPaused();
    }
    

    现在检查此状态,如果它在后台运行,则执行您喜欢的操作。您可以借助布尔值检查应用程序是否因其他原因未关闭。

    【讨论】:

      【解决方案3】:

      一般来说,在 Android 中没有关闭应用程序这样的事情:用户只是停止使用该应用程序。由程序员确保用户没有提及进程的创建和终止。

      请注意,Android 可能会在内存不足时终止应用程序进程并稍后重新启动应用程序。

      例如,一个旧的类似办公室的应用程序存在以下错误:用户想要插入照片,办公应用程序调用相机应用程序,Android 杀死了办公应用程序。 Office 应用程序尚未准备好重新启动,并且丢失了所有文档更改(这是错误)。显然,有问题的应用忽略了传递给 onCreate() 的包。

      所以进程生命周期和应用程序生命周期是不同的东西。进程重启对应用程序可见:静态变量被重置为其初始值(很可能为空)。所以可以有一个非空的包和空的静态数据结构。

      当进程终止时执行一段代码的一个例子可以在下面找到: Android camera locked after force close 。 在那篇文章中解决的问题是,当进程终止时,Android 本身不会关闭相机。我无法从您的帖子中判断您的问题是否与此类似。

      【讨论】:

      • 有什么方法可以检查应用程序是否通过服务运行。假设我们在应用启动时启动了一项服务,并且该服务不断检查应用是否正在运行。
      • 您可以通过在 AndroidManifest.xml 中指定 &lt;service ... android:process=":someName" ... &lt;/service&gt; 在单独的进程中创建您的服务
      • 但是你无法知道哪个进程会先被杀死。
      【解决方案4】:

      如果您在 Activity 中使用派生自类 ViewModel 的对象,则可以捕获事件:onCleared();在 onDestroy() 之后总是调用它。 见:https://developer.android.com/topic/libraries/architecture/viewmodel

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 2015-06-26
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多