android后台服务发送广播,android – 正确使用后台服务/广播接收器

Do I even need a service?

这取决于.如果您在BraodcastReceiver中所做的工作不需要花费太多时间,那么您可以在那里完成.但是,如果你的onReceive()运行时间太长,那么Android会杀掉它.通常,您不应在BroadcastReceiver中执行网络I / O.因此,您可以使用BroadcastReceiver来启动您的服务,它可以完成真正的工作.

Is my design backwards? Should the Broadcast Receiver call the service

to do the work?

看我对第一个问题的回答(上)

Can you register the broadcast receiver in the manifest and not have

to call it at all in code?

是的,您可以添加< intent-filter>标记到< receiver>清单中的标签.每当广播适当的Intent时,这将自动启动BroadcastReceiver.您的应用程序无需运行即可实现此目的.像这样的东西:

android:name=".MyReceiver" >

Are multiple calls to startService() bad? I know only 1 service runs,

but how do I check if the service is already running before creating

it?

多次调用startService()都可以.如果它已经启动,它将不会启动另一个.每次调用startService()都会在服务中生成对onStartCommand()的调用.如果要查看它是否已在运行,可以使用BroadcastReceiver中的peekService().如果IBinder正在运行,它将返回IBinder,但如果它尚未运行则不会启动它.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的发送和接收自定义广播的完整代码示例: 发送广播: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 发送自定义广播 Intent intent = new Intent("com.example.MY_CUSTOM_ACTION"); intent.putExtra("message", "Hello world!"); sendBroadcast(intent); } } ``` 接收广播: ```java public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("com.example.MY_CUSTOM_ACTION")) { // 获取广播中的消息 String message = intent.getStringExtra("message"); Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } } } ``` 在 AndroidManifest.xml 文件中注册广播接收器: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcastdemo"> <uses-permission android:name="android.permission.INTERNET"/> <application ...> <receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="com.example.MY_CUSTOM_ACTION"/> </intent-filter> </receiver> </application> </manifest> ``` 注意:在 AndroidManifest.xml 文件中注册的广播接收器只能接收应用程序在前台或后台运行时发送广播。如果应用程序被销毁,则无法接收广播。如果需要在应用程序未运行时接收广播,则需要使用动态注册方式注册广播接收器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值