服务是在后台运行 可以理解成是没有界面的activity
定义四大组件的方式都是一样的
定义一个类继承Service
start方式开启服务的特点
特点:
(1)服务通过startservice方式开启 第一次点击按钮开启服务 会执行服务的onCreate 和 onStart方法
(2)如果第二次开始在点击按钮开启服务 服务之后执行onStrat方法
(3)服务被开启后 会在设置页面里面的 running里面找得到这个服务
***(4)startservice 方式开启服务 服务就会在后台长期运行 直到用户手工停止 或者调用StopService方法 服务才会被销毁
bindService 方式开启服务的特点
(1)当点击按钮第一次开启服务 会执行服务的onCreate方法 和 onBind()方法
(2) 当我第二次点击按钮在调用bindservice 服务没有响应
**(3) 当activity销毁的时候服务也销毁 不求同时生但求同时死
(4)通过bind方式开启服务 服务不能再设置页面里面找到 相当于是一个隐形的服务
(5)bindservice不能多次解绑 多次解绑会报错
为什么要引入bindService
目的为了调用服务里面的方法
/** * 定义服务 需要在清单文件里面配置 * @author * */ public class FirstService extends Service { @Override public IBinder onBind(Intent intent) { System.out.println("onBind"); return null; } //当服务第一次被开启的时候调用 @Override public void onCreate() { System.out.println("onCreate"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("onStartCommand"); return super.onStartCommand(intent, flags, startId); } //服务销毁的时候执行 @Override public void onDestroy() { System.out.println("onDestroy"); super.onDestroy(); } }
/** * activity 你大爷 是 服务 * * @author * */ public class MainActivity extends Activity { private MyConn conn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 点击按钮开启服务 public void click1(View v) { Intent intent = new Intent(this, FirstService.class); // 开启服务 startService(intent); } // 点击按钮停止服务 public void click2(View v) { Intent intent = new Intent(this, FirstService.class); stopService(intent); } // 点击按钮通过 bindservice 方式去开启服务 public void click3(View v) { Intent intent = new Intent(this,FirstService.class); //连接到服务FirstService conn = new MyConn(); System.out.println("bind----"+conn); bindService(intent,conn, BIND_AUTO_CREATE); } //点击按钮 取消绑定服务 public void click4(View v) { System.out.println("unbind----"+conn); unbindService(conn); } //当activity销毁的时候调用 @Override protected void onDestroy() { //当activity销毁的时候 取消绑定服务 unbindService(conn); super.onDestroy(); } //用来监听服务的状态 private class MyConn implements ServiceConnection{ //连接成功后调用 @Override public void onServiceConnected(ComponentName name, IBinder service) { } //失去连接调用 @Override public void onServiceDisconnected(ComponentName name) { } } }
AndroidManifest.xml
<!--配置服务 --> <service android:name="com.itheima.service.FirstService"> </service>