回答
如果您的Service
处于活动状态,那么Application
类别也是活动。
否则,您将无法使用getApplicationContext()
。
虽然我怀疑论者一直运行有一个很干净的方法,使Service
具有一定Activity
通信的服务,应该是最后一个是被激活的。
这种干净的方式叫做LocalBroadcastManager。
旨在接收数据的Activity
应该在onResume()
中注册BroadcastReceiver
并在onPause()
中注销它。
你实例化你的BroadcastReceiver
在活动的onCreate()
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 intent
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
如果您的Activity
是清醒,它将响应信号。否则,如果它在后台,或者它没有实例化,它不会。
您可以将此模式应用于任意数量的活动。
尽管如此,我从来没有使用这个Application
类中。但是你可以尝试在那里注册你的接收器。它可能有效,因为如果Application
类被销毁,BroadcastReceiver
也被销毁,因此也可能未注册。
问题是,如果你的应用程序被破坏,你的服务也会被杀死。除非你在另一个过程中启动它。但是,它将拥有它自己的Application
实例;这是一件复杂的事情,您现在可能不想深入细节......
重要:由于Application
类是不依赖于任何UI组件,你可以做任何你需要直接您的服务中。如果你需要操纵用户界面,那么上面描述的模式将适用于你。
请阅读关于新Android's background limitations。
编辑:
噢权利,如果你需要你的服务来调用你的Application
类中的函数声明,你可以做
我没虽然我不明白你的问题,但是上述任何一种方法都适合你。
- 1. 从应用程序类广播意图到Android服务的麻烦
- 2. 从服务发送广播到活动?
- 3. 将广播从一个应用程序发送到另一个
- 4. 服务未收到广播意图
- 5. 从Ios应用程序发送图像到web api服务
- 6. 从服务器发送图像到Android应用程序
- 7. 从应用程序发送图像到网络服务器
- 8. 从广播接收器发送意图与附加活动(问题与服务)
- 9. 系统应用程序未收到广播的意图
- 10. 发送广播服务,同时绑定
- 11. 将图像文件数据从C#windows应用程序发送到WCF服务
- 12. 将图像从iOS应用程序发送到服务器的正确方法
- 13. 将图像从drawable发送到另一个应用程序/服务
- 14. 将系统广播发送到仅托管配置文件应用程序
- 15. Hot从仪表测试发送广播意图
- 16. 处理程序中的广播意图
- 17. 从应用程序发送字符串到服务器
- 18. 从j2me应用程序发送XML数据到服务器
- 19. 从iOS应用程序发送参数到SOAP ASMX服务
- 20. 从Android应用程序发送照片到服务器端
- 21. 从iphone应用程序发送日期时间到web服务
- 22. 发送数据从服务器到Android应用程序
- 23. 从服务器发送命令到android应用程序
- 24. 将数据从.NET应用程序广播到另一个
- 25. 获取广播意图的应用程序名称
- 26. 无法启动应用程序的广播意图
- 27. 应用程序关闭时接收意图广播
- 28. Android广播发送应用程序的包名
- 29. Java从服务器发送TCP包广播
- 30. PHP的WebSocket - 广播(发送)从服务器
为什么应用程序类?你可以澄清你的情况 –
@VivekMishra我有一个服务运行XMPP繁重。这项服务永远在后台运行。现在,当我想将数据从服务传输到应用程序时,用户可能正在使用该应用程序。所以我想先唤醒应用程序,然后发送意图和应用程序类将其处理到正确的活动 – Bezaleel
为什么应用程序类?那可以在广播接收机上完成 –