activity_main
MainActivity
package com.example.android_service;import android.app.Activity;import android.app.ActionBar;import android.app.Fragment;import android.content.Intent;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.os.Build;public class MainActivity extends Activity { private Button stop,start; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); start=(Button)this.findViewById(R.id.start); stop=(Button)this.findViewById(R.id.stop); final Intent intent=new Intent(); intent.setAction("dashu.test.service"); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub startService(intent); } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub stopService(intent); } }); }}MyService
package com.example.android_service;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;public class MyService extends Service { private final static String TAG = "dashu"; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } // Service创建时候回调 @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.d(TAG, "-->服务创建"); } //服务启动时候回调 @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.d(TAG, "-->服务启动"); return super.onStartCommand(intent, flags, startId); } //服务关闭时候回调 @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d(TAG, "-->服务关闭"); }}
使用context.startService() 启动Service是会会经历:
context.startService() ->onCreate()- >onStart()->Service runningcontext.stopService() | ->onDestroy() ->Service stop 假设Service还没有执行,则android先调用onCreate()然后调用onStart();假设Service已经执行,则仅仅调用onStart()。所以一个Service的onStart方法可能会反复调用多次。 stopService的时候直接onDestroy,假设是调用者自己直接退出而没有调用stopService的话,Service会一直在后台执行。该Service的调用者再启动起来后能够通过stopService关闭Service。 所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy