是否可以将意图从服务发送到Application类?没有活动?
我不知道在特定时间会运行什么活动,因此我在活动类中添加了一个布尔型标志,该标志检测活动并根据接收到的广播发送适当的数据.
解决方法:
如果您的服务处于活动状态,那么您的Application类也将处于活动状态.
否则,您将无法使用getApplicationContext().
尽管我对永远运行的服务持怀疑态度,但是如果当前的最后一个活动处于活动状态,则有一种非常干净的方法可以使该服务与某个活动进行通信.
这种干净的方式称为LocalBroadcastManager.
打算接收数据的活动应在onResume()中注册一个broadcastReceiver,并在onPause()中注销.
您可以在Activity的onCreate()中实例化broadcastReceiver
this.localbroadcastReceiver = new broadcastReceiver() { @OverrIDe public voID onReceive(Context context, Intent intent) { // Do what you have to do here if you receive data from the Service. }}
您创建一个过滤器,以便您的活动仅侦听某种类型的信号.
private IntentFilter notifIntentFilter new IntentFilter("com.you.yourapp.MY_SIGNAL");
在onResume()中
LocalbroadcastManager.getInstance(getApplicationContext()).registerReceiver(this.localbroadcastReceiver, notifIntentFilter);
在onPause()中
LocalbroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(this.localbroadcastReceiver);
现在,无论何时要将数据发送到活动中,您的服务都可以致电:
final Intent intent = new Intent();intent.setAction("com.you.yourapp.MY_SIGNAL");// put your data in intentLocalbroadcastManager.getInstance(getApplicationContext()).sendbroadcast(intent);
如果您的活动处于唤醒状态,它将响应该信号.否则,如果它在后台或未实例化,则不会.
您可以将此模式应用于任意数量的“活动”.
不过,我从未在Application类中使用过此方法.但是您可以尝试在此处注册接收器.这可能会起作用,因为如果Application类被销毁,那么broadcastReceiver也将被销毁,因此也可能未注册.
关键是,如果您的应用程序被销毁,您的服务也会被杀死.除非您在另一个过程中启动它.但是,它将拥有自己的Application实例;这是一件复杂的事情,您现在可能不想详细了解…
重要提示:由于Application类未绑定到任何UI组件,因此您可以在服务内部直接执行所需的任何 *** 作.如果您需要 *** 作UI,那么上述模式将为您工作.
请阅读有关新的Android’s background limitations的信息.
编辑:
哦,是的,如果您需要Service来调用Application类中声明的函数,则可以
((MyApplication) getApplication()).myFunctionToHandleData(Intent intent);
虽然我不太了解您的问题,但是上述两种方法都可以为您服务.
总结以上是内存溢出为你收集整理的android-将广播意图从服务发送到应用程序类全部内容,希望文章能够帮你解决android-将广播意图从服务发送到应用程序类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)