【发布时间】:2016-12-22 07:17:34
【问题描述】:
如果 MyApp 的 Receiver 在后台运行,它就可以正常工作:
public class MySmsReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("triggered sms");
if(intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
Toast.makeText(context, "message Received", Toast.LENGHT_SHORT).show();
}
}
我的接收者清单文件是
<receiver android:name=".MySmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
文档说,如果我在清单文件中声明接收器,它应该始终有效。但就我而言,它不是......
但每当我通过滑动清除我最近使用的应用程序时,它就会停止工作。在我去任务管理器并看到 MyApps forcestop 被禁用后,如下图
我发现一些应用程序,如 watsapp 和 fb 总是保留在内存中,我说这个 bcoz 在清除最近的应用程序后,任务管理器仍然具有如下状态
我如何在我的应用程序中执行此操作.. 是什么让我的应用程序表现得像其他第三方应用程序,如 watspp 和 facebook...我怎样才能让我的应用程序始终在内存中我问这个然后只有我的接收器将永远工作.. 如果我错了,那么给我一个解决方案来做到这一点......
我一直在搜索这个,但我仍然找不到解决方案......我问错了吗?或者真的有办法吗?请有人帮助我......这让我一个星期!希望我在这里解释我的问题,如果我不问我,我会立即回复您。
【问题讨论】:
-
您在哪个设备上测试过?某些设备在从最近的应用列表中清除时会强制停止应用,但一些热门应用除外。
-
在模拟器和其他一些设备上试用。
-
有时我在 Stackoverflow 上遇到了同样问题的一个线程。我正在寻找它,以便我会指向你那里。
-
您可能想查看SO post 中给出的解决方案,看看是否有帮助。这个particular answer 提供了一些方法,您的应用可能还需要使您的接收器不太可能停止工作,例如从
onStartCommand()返回START_STICKY。 -
@Mr.Popular 您可能想检查stackoverflow.com/questions/21550204/… 并使用 START_STICKY 继续运行,但如果设备实际上强制关闭应用程序,就像按下屏幕上的按钮一样,它不会启动再次,直到用户与之交互。 FB 和 whatsapp 可能会像其他人提到的那样得到特殊待遇。
标签: android service google-cloud-messaging broadcastreceiver taskmanager