标签: application-lifecycle

确定前台的应用程序是否是不受欢迎的?

检测应用程序是否在前台有很多原因.例如 - 作为GCM/C2DM推送通知的触发器 - 当应用程序是前台和后台时,许多应用程序将有充分的理由实现不同的行为.其他原因可能是 - 淘汰消耗宝贵资源的服务,例如在后台任务中查询服务器.

需要明确的是:后台app的定义(我认为)是:
应用程序,它没有调用任何活动onStart()方法,也没有调用onStop()方法.那是因为活动只在那个时候在生命周期中对用户可见.

从另一方面 -

  • 似乎Google不希望应用程序对主页按钮作出反应(它不是API的一部分)

  • onBackPressed()对"root/main"活动作出反应作为指示离开Activity肯定不是一个好主意(因为很多用户使用主页按钮,而不是后退按钮)

  • API中没有方法可以确定app是否为前景(根据我的定义..)

如果我没有错过API中的某些内容,而且确实如此 - 为什么没有原因可以轻松确定应用程序是否为前景???? !!!!

我知道我可以做的是确定应用程序是否为前景在此主题中描述 - 如何检测Android应用程序何时进入后台并返回到前台

但正如@Emil所说 - 它需要特殊许可,或者需要一些棘手的逻辑,这些逻辑很快就会成为维护的问题,并且它闻起来像是糟糕的方法(虽然这就是我现在正在做的事情,因为我没有更好的想法. ..)

我的问题基本上是:

  • 有充分理由没有这样的API方法吗?

  • 是否考虑应用程序是否为前景是一种不好的方法?

  • 有没有其他方法可以知道应用程序是否是前景?

android application-lifecycle activity-lifecycle

3
推荐指数
1
解决办法
1827
查看次数

如何在UWP中重新启动应用程序?

目前在我的UWP应用程序中,我提供了一种更改应用程序主题的方法.但为了使更改生效,用户必须手动关闭应用程序并重新启动它.我正在寻找一种自动执行的方法,即以编程方式重新启动应用程序.

它甚至可能吗?谢谢.

c# application-lifecycle uwp

3
推荐指数
1
解决办法
2083
查看次数

Flutter:如何在没有小部件的情况下跟踪应用程序生命周期

我参与了 FlutterSound 项目,该项目作为包含 api 的包提供,但就本问题而言,该项目不包含小部件。

当应用程序更改其状态(AppLifecycleState.pause/resume)时,API 需要处理事件。(当应用程序暂停/恢复时,我们需要停止/恢复音频)。

我可以看到如何使用 WidgetsBindingObserver 在小部件中执行此操作,但 api 需要相同的信息,而不必依赖小部件。

SchedulerBinding 类有一个方法 handleAppLifecycleStateChanged ,它似乎提供了所需的信息,但不清楚如何在小部件之外实现它。

application-lifecycle flutter

3
推荐指数
1
解决办法
3405
查看次数

最简单的方法是在单例和更多单元中使用BroadcastReceiver

我有一个单例,它存储了一些关于我的应用程序用户的谨慎信息.目前,它存储用户的登录信息和用户的位置.

1)该位置通过服务找到.目前,服务直接引用我的单身人士将经度和纬度填入其中.我想使用BroadcastReceiver来发送单例听到并用来更新值的广播.

但是,要注册BroadcastReceiver,我需要在我的单例中使用Context.什么是实现我想要的最简单的方法.BroadcastReceiver可能不是合适的对象吗?

2)另外,我使用单身人士时会遇到什么问题?我认为Android可能会在任何给定时间回收这个内存(这显然是坏事); 那我该怎么办呢?是否会传入应用程序的Context并将其存储在成员变量中?

Android文档指出:"但是,静态的生命周期并不在你的控制之下;因此要遵守生命周期模型,应用程序类应该启动并拆除onCreate()和onTerminate中的这些静态对象( )应用程序类的方法,"但我不完全确定如何实现这一点.

singleton android broadcastreceiver application-lifecycle

2
推荐指数
1
解决办法
3249
查看次数

Android Storing Socket.io对象用于多个活动

我正在制作我的第一个基于Socket.io的android应用程序。套接字从Web服务发送和接收数据。应用程序中有许多不同功能的屏幕。如何在这些不同的活动中使用相同的套接字连接。

我尝试过将Socket对象设置和存储在Application类中,它似乎运行良好,但是当应用程序进入后台并在后台放置了一段时间后,应用程序被杀死,套接字对象为NULL,导致aoo崩溃。空指针异常。

public class MyApplication extends Application {

    private Socket mSocket;

    private final String TAG = "Application Class";

    public Socket getSocket() {
        return mSocket;
    }

    public Socket createSocket() {

    try {
        Manager manager = new Manager(new URI("http://0.0.0.0"));
    } catch (URISyntaxException URIse) {
        URIse.printStackTrace();
    }

        return mSocket;
    }

}
Run Code Online (Sandbox Code Playgroud)

在活动中访问套接字

MyApplication app;
app = (MyApplication ) getApplication();
app.getSocket;
Run Code Online (Sandbox Code Playgroud)

android application-lifecycle activity-lifecycle socket.io

2
推荐指数
1
解决办法
1537
查看次数

ACTION_IMAGE_CAPTURE 意图:避免 Activity 被破坏/进程被终止

这个问题是针对熟悉Activity Lifecycle 的Android 开发人员的。

我正在开发一个执行面部检测和面部标志识别的应用程序。

相应的机器学习模型需要很长时间才能从 SD 存储中解析并加载到内存中。在当前的平均 Android 设备上,很容易需要长达 20 秒的时间。顺便说一句,所有这些面部分析内容和模型加载都发生在 C++ 本机代码中,并使用 Android NDK + JNI 进行集成。

由于模型加载需要很长时间,因此实际的解析和加载是通过 AsyncTasks 提前安排在后台的,因此用户不会注意到巨大的延迟。

在执行实际的人脸分析之前,用户可以通过 MediaStore.ACTION_IMAGE_CAPTURE 进行自拍。这将调用设备上安装的单独相机应用程序并通过 onActivityResult 接收图片。

现在问题开始了:当用户位于单独的相机活动/应用程序中时,几乎总是整个应用程序进程都会被终止。大多数情况下,它似乎发生在从相机应用程序返回之前(时间似乎很奇怪)。我做了另一个测试,以确认在相机应用程序内按下拍摄按钮时会发生这种情况。在那一刻,我的应用程序被杀死了。当按下“接受图像”按钮时,将重新创建应用程序。ActivityManager 在 logcat 中给出的进程终止原因是“prev LAST”(我通过 Google 没有找到任何关于此含义的信息,但我看到许多其他应用程序也因这个原因被终止,所以它似乎发生了经常)。

因此,我的应用程序的所有 Activity 都需要由 Android 重新创建(对我来说很好,因为它发生得很快),而且面部分析模型也必须从头开始重新加载,用户会注意到在自拍之前有巨大的延迟可以进行处理。

我的问题是:是否有可能告诉Android,活动/应用程序有合法的理由在暂时处于后台获取相机图片时不被杀死?毕竟,ActivityManager 做出了终止应用程序的错误决定。如此频繁地重新加载模型会占用大量的 CPU 和内存资源。

这似乎是 Android 生命周期架构中的一个疏忽。我知道很少有应用程序有我的应用程序的特定要求,但它仍然看起来很愚蠢。我能想到的“解决”这个问题的唯一方法是在应用程序中实现我自己的相机 Activity,但这违背了 Android 自己的最佳实践。

还有一些“android:persistent”标志,您可以通过 AndroidManifest.xml 坚持您的 Activity,但文档完全不清楚其含义。请参阅有关此的文档。

顺便说一句:当应用程序进程被杀死时,onDestroy 不会被调用。我在某处读到不能保证 onDestroy 会被调用,这对我来说实际上不是问题。虽然我想知道为什么 Android 文档没有明确说明这一点。

android android-ndk application-lifecycle activity-lifecycle android-camera-intent

2
推荐指数
1
解决办法
1060
查看次数

IIS 6.0中的asp.net Web应用程序(asmx ws)在闲置数小时左右时会发生什么?

我有一个asmx Web服务,我将大量系统数据加载到内部数据结构.该系统数据用于检查请求的有效性.但是,当没有请求说3小时(可能更少)时,再次进行初始化.提供请求的对象有

private static bool _initOk

控制初始化的变量.当应用程序空闲时,变量设置为false.是因为IIS停止执行并且包含代码的dll被卸载还是什么?如果请求以稳定间隔到达,则不会再次进行初始化.我能做些什么吗?

谢谢!

br:马蒂

c# iis-6 web-services asmx application-lifecycle

1
推荐指数
1
解决办法
656
查看次数