gpt4 book ai didi

android - 应用程序是否应该处于运行状态才能触发 Intent ?

转载 作者:太空狗 更新时间:2023-10-29 16:22:34 25 4
gpt4 key购买 nike

我有一个非常简单的 IntentReceiver 来在时间变化时接收事件。这是代码:

public class IntentRec extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("IntentRec", intent.getAction());
}
}

<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<receiver android:name=".IntentRec">
<intent-filter>
<action android:name="android.intent.action.TIME_SET"/>
</intent-filter>
</receiver>
<activity android:name="MyActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>

但是,我在应用程序运行时收到了 Intent 。但是,如果我关闭(使用强制关闭)应用程序,则不会调用 onReceive。所以我的问题是,我是否仅在监听器应用程序运行时收到 Intent ?我认为 intents 旨在在应用程序未运行时运行目标监听器类。

谢谢

最佳答案

解决方案很简单:停止单击“强制关闭”。

在 Android 3.1+ 上,强制关闭将阻止您应用中的任何内容再次运行,直到用户手动运行您的 Activity 或其他东西(例如第三方应用)启动您的应用。


更新

我怀疑您对“停止”一词的多种含义感到困惑。让我们来看看这个过程,避免使用“停止”这个词,看看它是否有帮助。

当您的应用程序首次安装在 Android 设备上时,处于某些人称为“snicklefritzed”的状态。当应用程序处于这种“snicklefritzed”状态时,没有 list 注册的 BroadcastReceiver 将起作用。要使应用程序脱离“snicklefritzed”状态,某些第三方应用程序(如主屏幕启动器)必须明确请求在您的应用程序中运行某些内容(如 Activity )。因此,正常的事件过程是用户下载您的应用程序,单击它的启动器图标,然后您的应用程序进入“正常”状态并远离“snickelfritzed”状态。在“正常”状态下,您的 BroadcastReceiver 将正常工作。

假设您的BroadcastReceiver 用于ACTION_BOOT_COMPLETED 广播。 “snicklefritzed”状态与您的应用程序当前是否正在运行无关——它仅取决于您的应用程序是否曾经运行过。因此,如果用户安装了您的应用,但在对您的应用进行任何操作之前重启了他们的手机,您的ACTION_BOOT_COMPLETED 接收器将无法在启动时获得控制权。但是,如果用户在您的应用程序中运行某些内容,然后 重启手机,您的接收器将正常接收到ACTION_BOOT_COMPLETED广播。

通常情况下,应用程序会退出“snicklefritzed”状态并且永远不会返回到该状态。 导致应用程序再次“snicklefritzed”的一件事是,如果用户在“设置”中单击此应用程序的“强制关闭”。在这里,用户明确告诉 Android 您的应用程序行为不当,除非用户另有说明,否则不应再次运行。当然,如果用户再次启动您的 Activity,您将回到“正常”状态。

关于android - 应用程序是否应该处于运行状态才能触发 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com