Android中启动Service的两种方式:

  1. startService()
  2. bindService()

此文介绍第1种:startService()

startService()方式启动的service和启动它的activity的生命周期无关。

Android Service的生命周期包括onCreate(), onStart(), onDestroy()。

startService()方式启动Service,系统会回调Service的onCreate()、onStart()。这种方式启动的Service会一直运行,直到再次调用stopService()或者Service自身停止。如果Service已经运行,再次调用startService()方法,是不会再执行onCreate()的,只会执行onStart()。


下面用一个示例代码来验证采用startService的启动方式时,Activity和Service的在生命周期方面的关系:
(1)Eclipse工程截图:

(2)程序运行截图:

(3)代码:

  • MainActivity.java是程序主页面,显示三个按钮,功能依次是startService、stopService和结束Activity。
public class MainActivity extends Activity {    private static final String TAG = "MainActivity";     @Override      public void onCreate(Bundle savedInstanceState) {        Log.i(TAG, "MainActivity --onCreate");        super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          Button btnStart = (Button) findViewById(R.id.start_service);           Button btnStop = (Button) findViewById(R.id.stop_service);        Button btnFinish = (Button) findViewById(R.id.finish_activity);        btnStart.setOnClickListener(new View.OnClickListener() {               @Override               public void onClick(View v) {                 Log.i(TAG, "MainActivity --btnStart onClick");                startService();            }           });        btnStop.setOnClickListener(new View.OnClickListener() {               @Override               public void onClick(View v) {                Log.i(TAG, "MainActivity --btnStop onClick");                stopService();            }           });        btnFinish.setOnClickListener(new View.OnClickListener() {               @Override               public void onClick(View v) {                Log.i(TAG, "MainActivity --btnFinish onClick");                finish();            }           });       }     @Override    protected void onStart() {        Log.i(TAG, "MainActivity --onStart");        super.onStart();    }    @Override    protected void onResume() {        Log.i(TAG, "MainActivity --onResume");        super.onResume();    }    @Override    protected void onPause() {        Log.i(TAG, "MainActivity --onPause");        super.onPause();    }    @Override    protected void onStop() {        Log.i(TAG, "MainActivity --onStop");        super.onStop();    }    @Override    protected void onDestroy() {        Log.i(TAG, "MainActivity --onDestroy");        super.onDestroy();    }    private void startService(){        Log.i(TAG, "MainActivity --startService");        Intent intent = new Intent(MainActivity.this, Service.class);        startService(intent);      }      private void stopService(){        Log.i(TAG, "MainActivity --stopService");        Intent intent = new Intent(MainActivity.this, Service.class);        stopService(intent);    }}
  • MainService.java是所要绑定的service。
public class MainService extends Service {    private static final String TAG = "MainService";      private MyBinder mBinder = new MyBinder();    @Override      public IBinder onBind(Intent intent) {          Log.i(TAG, "MainService --onBind()");          return mBinder;      }      public class MyBinder extends Binder{          public MainService getService(){              return MainService.this;          }      }      @Override      public void onCreate() {          Log.i(TAG, "MainService --onCreate()");          super.onCreate();      }      @Override      public void onStart(Intent intent, int startId) {          Log.i(TAG, "MainService --onStart()");          super.onStart(intent, startId);      }    @Override      public void onDestroy() {          Log.i(TAG, "MainService --onDestroy()");          super.onDestroy();      }      @Override      public boolean onUnbind(Intent intent) {          Log.i(TAG, "MainService --onUnbind()");          return super.onUnbind(intent);      }}
  • activity_main.xml是MainActivity的layout。
"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" >    
  • AndroidManifest.xml是工程的配置信息。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.dadi.service_by_start"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="10"        android:targetSdkVersion="10" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.dadi.service_by_start.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            intent-filter>        activity>        <service android:name="com.dadi.service_by_start.MainService">service>    application>manifest>

源码下载

更多相关文章

  1. 为Android应用程序添加两个入口
  2. Android(安卓)项目中集成 Flutter
  3. Android纠正Activity横竖屏切换的生命周期的错误
  4. fullScreen时的软键盘监听(非重写Layout方式)
  5. android和vue交互之js调取原生安卓扫码库
  6. Android(安卓)Activity四种加载方式
  7. 为Android应用程序添加两个入口
  8. Android开发9——Activity的启动模式
  9. Android设定屏幕只竖屏或只横屏的两种方式

随机推荐

  1. 利其器-Android(安卓)studio界面
  2. Android(java)学习笔记73:线程组的概述和使
  3. 一段android跳转到web界面的代码
  4. android Bundle saveInsanceState
  5. Genymotion 解决虚拟镜像下载速度特别慢
  6. 在vs2012中用C#开发Android应用Xamarin环
  7. Android(安卓)material Design 之Coordin
  8. 编译TensorFlow Android(安卓)Camera Dem
  9. android 软件盘相关
  10. Android仿微博、人人Feed详情页吸附导航