Android-Service

来源:互联网 发布:mac谷歌翻墙教程 编辑:程序博客网 时间:2024/06/05 16:10

服务:运行不依赖用户界面,依赖创建服务时所在的应用进程,当进程被停止后,该服务也会停止。
应用场景:后台下载任务,保持应用生命力等不依赖界面的任务。

定义一个服务:

创建一个类继承Service,实现onBind方法,在onBind里面返回一个IBinder对象。

public class MyService extends Service {    private String TAG="MyService";    @Nullable    @Override    public IBinder onBind(Intent intent) {        Log.i(TAG, "onBind: ");        return new MyBinder();    }}

在清单文件注册服务:

<service android:name="com.sendi.service.MyService"></service>

Service中的方法:

  • onCreate方法:服务被创建时调用,当服务存在时则不被调用

  • onStarCommand()方法:服务被开启时调用

  • onDestroy()方法:服务销毁时调用

启动服务:

  • startService(intent)
Intent intent=new Intent(this,MyService.class);      startService(intent);

跟启动一个Activity很相似

  • 绑定服务:bindService(intent,sc,BIND_AUTO_CREATE);

停止服务:

  • stopService(intent)
Intent intent=new Intent(this,MyService.class);      stopService(intent);

Service还有一个stopService方法,用于停止本身

  • unbindService(ServiceConnection)

活动与服务间的通讯

  • 自定义Binder,在类里面定义要执行的方法

  • 在活动中定义一个ServiceConnect对象,并实现onServiceConnected和onServiceDisconnected方法

  • 指定要绑定服务:Intent intent=new Intent(ServiceActivity.this,MyService.class);

  • 绑定服务:定义bindService方法,传入参数:Intent,ServiceConnection,如何创建服务;

  • 解绑服务:unbindService(ServiceConnection)

具体代码:

public class MainActivity extends AppCompatActivity {    MyBinder mBinder=null;    Intent intent=null;    @Override    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        intent=new Intent(this, MyService.class);    }    ServiceConnection sc=new ServiceConnection() {    //绑定时调用        @Override        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {        //转成自己定义的Binder            mBinder= (MyBinder) iBinder;            mBinder.print();        }        @Override        public void onServiceDisconnected(ComponentName componentName) {        }    };    public void bindService(View view) {        Binder.clearCallingIdentity();        bindService(intent,sc,BIND_AUTO_CREATE);    }     @Override    protected void onDestroy() {        super.onDestroy();        unbindService(sc);    }}

生命周期

  • 创建服务时:onCreate=>onStartCommand=>onStart=>onDestroy,
  • 绑定服务时:onCreate=>onBind=>unBind=>onDestroy,

注意:当绑定和启动服务后:

  • 需要解绑和停止服务才会调用onDestory
  • 如果先启动服务(startService),则先调用onStartCommand=>onStart
  • 如果先绑定服务(bindService),则先调用onBind

IntentService类,可继承它来成为一个服务;绑定后会调用:onHandleIntent(Intent intent)。
特点:

  • onHandleIntent(Intent intent):执行在子线程
  • 在运行结束时该服务会自动停止
原创粉丝点击