前言:
我们都知道Android的四大基本组件:Activity、ContentProvider、Service以及BroadcastReceiver,前面的两个我们在前几篇已经具体讲解了,今天这一天我们就把后两者的使用具体说一下,由于Service和BroadcastReceiver常常一起使用,所以我们一起来学习。
一.Service的使用
Service是Android系统的后台服务组件,没有用户界面,但可以长时间的运行,比Activity的优先级高,可以用于进程间的通信。
Service也同Activity一样有自己的生命周期,但是Service有两种生命周期,也就是Service由两种启动以及对应的停止方式:
1.以启动方式使用的Service:
(1)特点:
A.通过Content.startService()启动,Content.stopService()或者Content.stopSelf()来停止;
(即只能通过其他组件启动,但可以自己停止)
B.不能与外部的组件进行交互;
(2)生命周期:
onCreate——>onStartCommand——>onDestroy
(3)示例代码:L0828_Service(记得注册)
MyService.java:
package com.example.l0828_service;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service{
//声明定时器,用于创建新的进程来计时
private Timer timer;
private TimerTask task;
private static int i=0;
//继承Service必须要重写的方法onBind
@Override
public IBinder onBind(Intent intent) {
return null;
}
/*Service的生命周期一:onCreate、onStartCommand、onDestroy方法构成*/
//onCreate方法,启动服务,每次启动仅仅调用一次
@Override
public void onCreate() {
System.out.println("onCreate");
super.onCreate();
}
//onStartCommand方法,一般在其中完成Service的工作
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("onStartCommond");
startTimer();
return super.onStartCommand(intent, flags, startId);
}
//onDestroy方法,用来释放Service的资源
@Override
public void onDestroy() {
System.out.println("onDestroy");
stopTimer();
super.onDestroy();
}
//开启定时器
public void startTimer(){
timer =new Timer();
task=new TimerTask(){
@Override
public void run() {
i++;
System.out.println(i);
}
};
timer.schedule(task, 1000, 1000);
}
//停止定时器
public void stopTimer(){
timer.cancel();
}
}
Mainactivity.java:
package com.example.l0828_service;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener{
private Button btn_start,btn_stop;
//声明Intent用于Activity向Service的跳转
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start=(Button) findViewById(R.id.btn_start);
btn_stop=(Button) findViewById(R.id.btn_stop);
btn_start.setOnClickListener(this);
btn_stop.setOnClickListener(this);
//Activity组件向Service组件的跳转
intent=new Intent(MainActivity.this,MyService.class);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
//开启服务
startService(intent);
break;
case R.id.btn_stop:
//停止服务
stopService(intent);
break;
}
}
}
主配置文件.xml文件中注册:
运行效果: