使用Service
2017-03-03 本文已影响8人
csp
在后台,做一些事物的处理,socket,长链接,推送的长链接等,需要用到service。
创建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在外界执行了startService的时候会执行。
new Thread(){
@Override
public void run() {
super.run();
while (true){
System.out.println("服务正在运行。。。。。");
try{
sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}.start();
System.out.println("onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
//Service的生命周期,一个onCreate和一个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("服务正在运行。。。。。");
try{
sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}.start();
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("Service Destroy");
serviceRunning = false;
}
}
在MainActivity中对Service进行操作:
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);
//多个事件监听器,可以让Class实现onClickListener接口,这样写起来更直观简洁。
}
@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的时候需要实现ServiceConnection,以下两个方法。
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("Service Connected");
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
也可以使用绑定服务的方式来启动服务。bindService和unBindService就可以用来绑定和解绑服务。
如果同时启动和绑定服务,如果要停止,就需要同时停止和解绑服务。
当你在某一个Activity里面绑定了服务,当你退出这个Activity的时候就会destroy这个服务。