安卓基础干货(八):安卓进程的学习

服务和进程优先级

什么是服务?

windows下的服务:没有界面、长期运行在后台的应用程序;

android下的服务:应用程序的一个组件,没有界面activity,长期运行在后台;

进程:是应用程序运行的载体。

进程与应用程序之间的关系: linux操作系统创建一个进程,这个进程负责运行dalvik虚拟机,Android的应用程序都是运行在dalvik虚拟机上的。

进程的生命周期:

1、应用程序一启动的时候就创建了进程;

2、当应用程序退出的时候进程并没有退出;

3、只有手工停止这个进程,进程才会结束;

操作系统尽量长时间的运行应用程序的进程,为了保证内从空间不被大量占用,它会按照进程的优先级,从低到高一级一级的杀死进程,直到内存空间被清理的差不多。

进程的等级:

Foreground process(前台进程)

应用程序,用户正在操作,activity的onresume方法被执行了,可以相应点击事件。

Visible process (可视进程)

应用程序的ui界面,用户还可以看到,但是不能操作了。

Service process (服务进程)

应用程序没有界面,但是有一个后台的服务还处于运行状态

Background process(后台进程)

应用程序没有服务处于运行状态,应用程序被最小化了,activity执行了onstop方法

Empty process(空进程)

没有任何组件运行,所有的activity都关闭了,任务栈清空了

服务的特点

服务的特点:

服务被创建时调用onCreate、onStartCommand; 服务只能被创建一次,可以开启多次onStartCommand; 服务只能被停止一次; 没有onPause、onStop、onResume、onRestart方法,因为service没有界面,长期运行在后台。

生命周期的方法:

onCreate:服务被创建的时候调用这个方法; onStartCommand :开启服务 onDestroy:销毁服务

电话监听器的模板代码(重点)

步骤:

1、在工程中添加一个服务Service,重写onCreate方法; 2、在清单文件中配置服务; 3、在activity中开启服务; 4、在onCreate方法中使用TelephonyManager监听电话的状态; 5、在清单配置文件中添加权限

示例代码:

1、在工程中添加一个服务Service,重新onCreate方法:

public class DHQTService extends Service { /** * 当服务被创建的时候调用这个方法 */ @Override public void onCreate() { System.out.println("=========onCreate========="); super.onCreate(); TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE); } }

2、在清单文件中配置服务:

<service android:name="com.itheima.dhqtq.DHQTService"></service>

3、在activity中开启服务:

service = new Intent(this,DHQTService.class); //开启服务 startService(service);

4、在onCreate方法中使用TelephonyManager监听电话的状态:

/** * 当服务被创建的时候调用这个方法 */ @Override public void onCreate() { System.out.println("=========onCreate========="); super.onCreate(); TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE); } /** *自定义一个电话状态监听,监听电话 */ private class mylistener extends phonestatelistener { private MediaRecorder r; @Override public void onCallStateChanged(int state, String incomingNumber) { try { // super.onCallStateChanged(state, incomingNumber); System.out.println("====state===============" + state); switch (state) { case TelephonyManager.CALL_STATE_IDLE:// 闲置状态 System.out.println("关闭录音机,上传音频文件.................."); if(r != null){ r.stop(); r.release(); r = null; //上传文件 } break; case TelephonyManager.CALL_STATE_RINGING:// 闲置状态 System.out.println("准备好录音机,准备录音.................."); r = new MediaRecorder(); r.setAudioSource(MediaRecorder.AudioSource.MIC); r.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //r.setOutputFile("/mnt/sdcard/info.3gp"); r.setOutputFile(Environment.getExternalStorageDirectory()+"/info.3gp"); r.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); r.prepare(); break; case TelephonyManager.CALL_STATE_OFFHOOK:// 闲置状态 System.out.println("开始录音.................."); r.start(); break; } } catch (Exception e) { e.printStackTrace(); } } }

5、在清单配置文件中添加权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

start开启服务的生命周期(重点)

服务的特点:

服务被创建时调用onCreate、onStartCommand;

服务只能被创建一次,可以开启多次onStartCommand;

服务只能被停止一次;

没有onPause、onStop、onResume、onRestart方法,因为service没有界面,长期运行在后台。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzzxx.html