使用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这个服务。

上一篇下一篇

猜你喜欢

热点阅读