您的位置:首页 > 移动开发 > Android开发

Android服务Service详解(作用,生命周期,AIDL)系列文章--服务的生命周期

2017-06-18 13:55 645 查看
Android服务Service详解(作用,生命周期,AIDL)系列文章--服务的生命周期

前面一篇文章,我们说了为什么需要服务嘛:

首先,我们去创建一个服务,叫做SOBTestServices,并且继承自Service这个类。然后,去复写几个生命周期方法,详细说明请看代码吧:

package com.sunofbeaches.servicetestdemo;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;

/**
* Created by TrillGates on 17/4/15.
* God bless my code!
*/
public class SOBTestService extends Service {

private static final String TAG = "SOBTestService";

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "服务被创建了....");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "执行了 onStartCommand...");
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(TAG, "这个方法已经过时了,所以我们一般不会使用的!!!!");
}

@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "服务被销毁了....");
}
}
然后在我们的MainActivity里头,创建两个按钮。UI的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="start"
android:text="开启服务"/>

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="stop"
android:text="停止服务"/>
</LinearLayout>
接着是MainActivity的代码:

package com.sunofbeaches.servicetestdemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

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

}

/**
* 开始服务
*
* @param view
*/
public void start(View view) {
Intent intent = new Intent(this, SOBTestService.class);
startService(intent);
}

/**
* 停止服务
*
* @param view
*/
public void stop(View view) {
Intent intent = new Intent(this, SOBTestService.class);
stopService(intent);
}

}

然后我们愉快地运行起来是这样子的嘛(记得要在配置文件里头去配置一下服务哦!):



相关的操作和输入的Log如下:

点击开始服务:



可以看到,执行了onCreate方法,执行了onStartCommand方法,也执行了onStart方法。

我再次,看清楚了,是再次点击开始服务的按钮:



我们惊讶地发现,执行了onStart方法,执行了onStartComand方法,但是,并没有执行o
d323
nCreate方法。

这个时候,我去点击停止服务:



我们可以看出,执行了onDestroy方法。

我再次去点击停止服务:

竟然没有反应是吧,结论来了,我们总结一下吧!

从上面的操作,我们可以得出以下的结论:

开启服务,则会先执行onCreate方法,如果服务已经启动了,则不会再执行onCreate方法。

多次开启服务会执行onStart方法和onStartCommand方法,但是onStart方法已经过时了不推荐使用这个。

停止服务会执行onDestroy方法

如果服务已经停止了,再停止服务无效。

这就是服务最简单的生命周期啦,接下来,我们会在一下篇文章里头分析服务更复杂的生命周期。

网易云视频:





社区网站:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐