知識要點(diǎn):
- service是無界面的,可運(yùn)行在后臺淌铐,處理耗時(放在線程中)肺然,監(jiān)聽等任務(wù);
- service有兩種啟動方式:start腿准、bind
service生命周期:
截取自慕課網(wǎng)
兩種啟動方式區(qū)別:
截取自慕課網(wǎng)
start方式用法
- 定義MyStartService 類际起,繼承service
public class MyStartService extends Service{
@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();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
2、manifest文件中注冊哦
<service android:name="com.bzx.androidlearning.MyStartService"></service>
3释涛、activity中啟動
Intent intent = new Intent(MainActivity.this,MyStartService.class);
startService(intent);
4加叁、銷毀service
stopService(intent);
注意start方式service倦沧,啟動后唇撬,依次onCreate、onStartCommand展融,銷毀時onDestroy窖认,多次start,只會執(zhí)行一次onCreate
bind方式用法
1、同樣定義MyBindService 扑浸,繼承Service烧给。注意manifest中注冊。啟動順序是onCreate喝噪、onBind础嫡。onBind會返回接口鸭叙,這里自定義一個MyBinder 類繼承Binder座柱,內(nèi)部方法返回MyBindService。并在onBind中返回MyBinder實(shí)例澳腹。passMessage為自定義方法晚唇,供activity中調(diào)用巫财。
public class MyBindService extends Service{
public class MyBinder extends Binder{
public MyBindService getService(){
return MyBindService.this;
}
}
@Override
public void onCreate() {
System.out.println("onCreate");
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
System.out.println("onBind");
return new MyBinder();
}
@Override
public void unbindService(ServiceConnection conn) {
System.out.println("unbindService");
super.unbindService(conn);
}
@Override
public void onDestroy() {
System.out.println("onDestroy");
super.onDestroy();
}
public void passMessage(Context context){
Toast.makeText(context, "調(diào)用service中方法", Toast.LENGTH_SHORT).show();
}
}
2、activity中啟動service哩陕。其中創(chuàng)建一個ServiceConnection實(shí)例平项,重新兩個方法。onServiceConnected中悍及,獲取傳過來的binder對象闽瓢,進(jìn)而獲得Service對象myBindService 。myBindService.passMessage(Context)調(diào)用service中方法心赶。
MyBindService myBindService;
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBindService = ((MyBinder)service).getService();
}
};
intent = new Intent(MainActivity.this,MyBindService.class);
bindService(intent, connection, BIND_AUTO_CREATE);