四大组件——Service
Service服务
Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。
使用步骤和其他组件一样,一个类继承Service,重写方法,在清单文件中进行注册。
一个类继承
public class MyService extends Service{
@Override
public void onCreate() {//创建
Log.e( "MyService:" ,"onCreate");
super.onCreate();
}
@Nullable
@Override
public IBinderonBind(Intent intent) {//绑定
Log.e( "MyService:" ,"onBind");
return new MyBinder();
}
/**
* onStart 方法被onStartCommand替换
* */
// @Override
// public void onStart(Intent intent,int startId) {
// super.onStart(intent, startId);
// }
@Override
public int onStartCommand(Intent intent, int flags, int startId) {//开启
Log.e( "MyService:" ,"onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {//解绑
Log.e( "MyService:" ,"onUnbind");
return super.onUnbind(intent);
}
@Override
public void onDestroy() {//销毁
Log.e( "MyService:" ,"onDestroy");
super.onDestroy();
}
public void tests(){
Toast.makeText(this, "我是Service中的测试!", Toast.LENGTH_SHORT).show();
}
public class MyBinder extends Binder{
public void testOne(){
tests();
}
}
}
主方法调用
Service与activity交互的步骤:
1、 在Service中创建Binder的实现类
2、 在实现类中写要调用的方法
3、 在onBind方法中返回实现类的对象
4、 在调用者中声明Binder实现类的对象
5、 onServiceConnctered中获取bind的对象
6、 调用Service中的方法。
public void myOnclick(){ but_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MyService_Activity.this, MyService.class); startService(intent); } }); but_stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MyService_Activity.this, MyService.class); stopService(intent); } }); but_bind.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /** * service: Intent conn: ServiceConnection 用于监听服务的状态 flags: 连接的方式 int * */ Intent intent = new Intent(MyService_Activity.this, MyService.class); bindService(intent,coon, Service.BIND_AUTO_CREATE); } }); but_stopbind.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { unbindService(coon); } }); my_binder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mb.testOne(); } }); } public class MyServiceConnection implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) {//服务连接 mb = (MyService.MyBinder) service; } @Override public void onServiceDisconnected(ComponentName name) {//服务未连接 } } @Override protected void onDestroy() { super.onDestroy(); unbindService(coon); }