Service_生命周期

Service的生命周期语言描述

Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy 我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1 通过startService
Service会经历 onCreate –> onStartCommand (onStart是过时的方法,新方法是onStartCommand )
stopService的时候直接onDestroy

如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行。
下次调用者再起来仍然可以stopService。

2 通过bindService
Service只会运行onCreate, 这个时候 调用者和Service绑定在一起

调用者退出了,Srevice就会调用onUnbind–>onDestroyed
所谓绑定在一起就共存亡了。

注意:Service的onCreate的方法只会被调用一次,
就是你无论多少次的startService又 bindService,Service只被创建一次。
如果先是bind了,那么start的时候就直接运行Service的onStart方法,
如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,
只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。

这里写图片描述

Service的生命周期demo

TestService.java

/**
 * 启动服务的生命周期: onCreate()->onStartCommand()->onDestroy()->[shutdown]
 * 
 * 绑定服务的生命周期: onCreate()->onBind()->onUnbind()->onDestroy()
 * 
 * 注:Service类继承Context
 */
public class TestService extends Service {

    /**
     * 第一次startService的时候调用
     */
    @Override
    public void onCreate() {
        Log.i("ziru", "服务创建onCreate");
        super.onCreate();
    }

    /**
     * 每次startService的时候都调用
     */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("ziru", "服务开启onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    /**
     * 只有startService后执行onDestroy
     */
    @Override
    public void onDestroy() {
        Log.i("ziru", "服务销毁onDestroy");
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

}

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

    private Button btnStart;
    private Button btnStop;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);

        btnStart = (Button) findViewById(R.id.btn_start);
        btnStop = (Button) findViewById(R.id.btn_stop);

        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_start:
            Intent intent = new Intent(this, TestService.class);
            startService(intent);
            break;
        case R.id.btn_stop:
            Intent intent2 = new Intent(this, TestService.class);
            stopService(intent2);
            break;
        default:
            break;
        }
    }

}

main_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn_start"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="启动服务" />

    <Button
        android:id="@+id/btn_stop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止服务" />

</LinearLayout>

配置

<service android:name="com.example.testservice.TestService" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值