首先,不管是哪一种启动方式,都需要在清单配置文件中对Service 进行注册。
通过一个例子对这三种方式进行详解:显示系统时间,时间来自服务
第一种启动模式:
建一个MyService类,继承与Service
构建一个Handler
在onCreate方法中每个1秒发送一条广播,发送的广播中的数据就是当前的时间,代码如下:
handler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO 发送广播
Intent intent=new Intent("com.zph");
intent.putExtra("time", getServiceTime());
sendBroadcast(intent);
handler.postDelayed(this, 1000);
}
}, 1000);
当然,我们还需要一个广播接收者,在MainActivity中建了一个类
代码如下:
public class MyReceive extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if("com.zph".equals(intent.getAction())){
tv.setText(intent.getStringExtra("time"));
}
}
}
少不了的就是对其广播进行注册
IntentFilter filter=new IntentFilter();
filter.addAction("com.zph");
registerReceiver(receiver, filter);
不过也不要忘记解除注册
然后我们就可以通过两个按钮,实现开启和停止服务,然后我们广播接受者就可以得到数据,显示在我们的TextView上面
//开启服务
Intent intent=new Intent(this,MyService.class);
startService(intent);
//停止服务
Intent intent=new Intent(this,MyService.class);
stopService(intent);
不要忘了在MyService中的OnDestroy方法中,把handler对象给关闭
handler.removeCallbacksAndMessages(null);//传null是全都取消