在后臺(tái)谬莹,做一些事物的處理陋率,socket,長(zhǎng)鏈接教翩,推送的長(zhǎng)鏈接等沛简,需要用到service齐鲤。
創(chuàng)建Service:
public class MyService extends Service {
private boolean serviceRunning = false;
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return new Binder();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//onStartCommand在外界執(zhí)行了startService的時(shí)候會(huì)執(zhí)行。
new Thread(){
@Override
public void run() {
super.run();
while (true){
System.out.println("服務(wù)正在運(yùn)行椒楣。给郊。。捧灰。淆九。");
try{
sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}.start();
System.out.println("onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
//Service的生命周期,一個(gè)onCreate和一個(gè)onDestroy。
@Override
public void onCreate() {
super.onCreate();
System.out.println("Service Create");
serviceRunning = true;
new Thread(){
@Override
public void run() {
super.run();
while (serviceRunning){
System.out.println("服務(wù)正在運(yùn)行吩屹。跪另。。煤搜。。");
try{
sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}.start();
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("Service Destroy");
serviceRunning = false;
}
}
在MainActivity中對(duì)Service進(jìn)行操作:
public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection {
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(MainActivity.this,MyService.class);
findViewById(R.id.btnStartService).setOnClickListener(this);
findViewById(R.id.btnStopService).setOnClickListener(this);
findViewById(R.id.btnBindService).setOnClickListener(this);
findViewById(R.id.btnUnbindService).setOnClickListener(this);
//多個(gè)事件監(jiān)聽器唧席,可以讓Class實(shí)現(xiàn)onClickListener接口擦盾,這樣寫起來更直觀簡(jiǎn)潔。
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnStartService:
startService(intent);
break;
case R.id.btnStopService:
stopService(intent);
break;
case R.id.btnBindService:
bindService(intent,this, Context.BIND_AUTO_CREATE);
break;
case R.id.btnUnbindService:
unbindService(this);
break;
}
}
//使用BindService的時(shí)候需要實(shí)現(xiàn)ServiceConnection淌哟,以下兩個(gè)方法迹卢。
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("Service Connected");
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
也可以使用綁定服務(wù)的方式來啟動(dòng)服務(wù)。bindService和unBindService就可以用來綁定和解綁服務(wù)徒仓。
如果同時(shí)啟動(dòng)和綁定服務(wù)腐碱,如果要停止,就需要同時(shí)停止和解綁服務(wù)掉弛。
當(dāng)你在某一個(gè)Activity里面綁定了服務(wù)症见,當(dāng)你退出這個(gè)Activity的時(shí)候就會(huì)destroy這個(gè)服務(wù)。