Dav*_*ita 2 android android-intent
我有一个非常简单的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>
Run Code Online (Sandbox Code Playgroud)
但是,我在应用程序运行时收到了意图.但是如果我关闭(使用强制关闭)应用程序,则不会调用onReceive.所以我的问题是,我是否只在监听器应用程序运行时收到意图?我认为意图设计为在应用程序未运行时运行目标侦听器类.
谢谢
解决方案很简单:停止单击强制关闭.
在Android 3.1+上,强制关闭会阻止您的应用中的任何内容再次运行,直到用户手动运行您的活动或其他内容(例如,第三方应用)启动您的应用.
UPDATE
我怀疑你被"停止"这个词的多重含义搞糊涂了.让我们一起完成整个过程,避免使用"停止"这个词,看看它是否有帮助.
当您的应用首次安装在Android设备上时,处于某种状态称为"snicklefritzed"的状态.当应用程序处于这种"snicklefritzed"状态时,没有任何清单注册BroadcastReceiver将起作用.要将应用程序移出"snicklefritzed"状态,某些第三方应用程序(如主屏幕启动程序)必须明确请求在您的应用程序中运行某些内容(如活动).因此,正常的事件过程是用户下载您的应用程序,点击它的启动器图标,并且您的应用程序将进入"正常"状态并远离"snickelfritzed"状态.在"正常"状态下,您的BroadcastReceiver工作正常.
我们假设你BroadcastReceiver是ACTION_BOOT_COMPLETED广播."snicklefritzed"状态与您的应用程序当前是否正在运行无关 - 它仅取决于您的应用程序是否曾经运行过.因此,如果用户安装了您的应用程序,但在对您的应用程序执行任何操作之前重新启动其手机,则您的ACTION_BOOT_COMPLETED接收器将无法在启动时获得控制权.但是,如果用户在您的应用中运行某些内容,然后重新启动手机,您的接收器将ACTION_BOOT_COMPLETED正常接收广播.
通常情况下,应用程序会退出"snicklefritzed"状态,永远不会返回该状态.如果用户在"设置"中单击此应用程序的"强制关闭" ,则会导致应用程序再次被"冻结"的一件事情.在这里,用户明确告诉Android您的应用程序行为不端,并且在用户另有说明之前不应再次运行.当然,如果用户再次启动您的活动,您将返回"正常"状态.