Service是android系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service的启动有两种方式:context.startService() context.bindService()。

使用context.startService() 启动Service是会会经历:
context.startService() ->onCreate()- >onStartCommand()->onStart()->Service running
context.stopService() | ->onDestroy() ->Service stop

如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。

stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。

所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy

下面代码为startService()方法启动服务:

MainActivity:

package com.test.servicedemo;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;//import android.view.MenuItem;import android.view.View;import android.widget.Button;//import android.support.v4.app.NavUtils;public class MainActivity extends Activity{private Button btn_Start;private Button btn_Stop;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_Start = (Button) findViewById(R.id.StartService);btn_Stop = (Button) findViewById(R.id.StopService);btn_Start.setOnClickListener(listener);btn_Stop.setOnClickListener(listener);}private View.OnClickListener listener = new View.OnClickListener(){@Overridepublic void onClick(View v){Intent intent = new Intent(MainActivity.this, ExampleService.class);//不可以把这句写在方法外面// TODO Auto-generated method stubswitch (v.getId()){case R.id.StartService:startService(intent);break;case R.id.StopService:stopService(intent);break;}}};@Overridepublic boolean onCreateOptionsMenu(Menu menu){getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}

ExampleService:

package com.test.servicedemo;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;public class ExampleService extends Service{private static final String TAG = "ExampleService";@Overridepublic void onCreate(){// TODO Auto-generated method stubsuper.onCreate();Log.i(TAG, "ExampleService-->onCreate");}@Overridepublic void onDestroy(){// TODO Auto-generated method stubsuper.onDestroy();Log.i(TAG, "ExampleService-->onDestroy");}@Overridepublic void onStart(Intent intent, int startId){// TODO Auto-generated method stubsuper.onStart(intent, startId);Log.i(TAG, "ExampleService-->onStart");}@Overridepublic IBinder onBind(Intent intent){// TODO Auto-generated method stubreturn null;}}

更多相关文章

  1. 解决ADB server didn't ACK * failed to start daemon *
  2. android studio不能运行
  3. Android实现开机自动启动Service或app的方法
  4. android录制音频的时,报错setAudioSource failed.
  5. Android系统权限那些事
  6. Android(安卓)双开沙箱 VirtualApp 源码分析(一)
  7. Android(安卓)-- 使用主题配置文件,去掉程序启动界面的短暂黑屏
  8. Android(安卓)View的加载过程
  9. Android(安卓)深入解析AsyncTask(doInBackground不工作)

随机推荐

  1. Android 告急!
  2. Android学习方向
  3. 安裝 Android 開發工具
  4. flutter与android混合开发一:Android原生
  5. Sony Reader PRS - T1 被駭顯露更多 Andr
  6. Android传感器(第一篇)
  7. 如何上传应用软件到 Android Market集市
  8. 浅谈android应用的版本更新
  9. Android面试系列文章2018之Android部分之
  10. Android中AsyncTask的简单用法及实现网络