Android(安卓)Service 之StartService()
16lz
2021-01-26
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;}}
更多相关文章
- 解决ADB server didn't ACK * failed to start daemon *
- android studio不能运行
- Android实现开机自动启动Service或app的方法
- android录制音频的时,报错setAudioSource failed.
- Android系统权限那些事
- Android(安卓)双开沙箱 VirtualApp 源码分析(一)
- Android(安卓)-- 使用主题配置文件,去掉程序启动界面的短暂黑屏
- Android(安卓)View的加载过程
- Android(安卓)深入解析AsyncTask(doInBackground不工作)