pasting
1 进程的概念
[1]Android下四大组件都运行在主线程下
[2]服务是在后台下运行 没有界面的activity
service 是 activity的大爷
进程的优先级
[1]Foreground process 前台进程 优先级最高 相当于activity执行了onResume方法 用户正在交互
[2]Visible process 可视进程 一直影响用户看得见相当于activity执行了onPause方法
[3]service process 服务进程 通过startService方法开启一个服务
[4]Background process 后台进程 相当于activity执行了onStop方法 界面不可见 但是activity并没有销毁
[5]Empty process 空进程 不会维持任何组件运行
2 start方式开启服务的特点
[1]定义四大组件的方式是一样的
[2]定义一个类继承Service
[3]第一次点击按钮开启服务 服务执行onCreate方法和onStartCommand方法
[4]第二次点击按钮 再次开启服务 服务执行onStartCommand方法
[5]服务一旦被开启 服务就会后台长期运行 直到用户手工停止
补充:股票应用
3 电话qie听器案例
TelephoneManager
实现步骤
[1]定义一个服务 开启服务 记得在清单文件配置服务
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" />
[2]在服务的onCreate方法里面 获取TelephoneManager
// [1]获取teltphonemanager的实例
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
[3]注册电话的监听
/ [2]注册电话的监听
tm.listen(new MyPhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);
[4]定义一个类用来监听电话的状态
// 定义一个类用来监听电话的状态
private class MyPhoneStateListener extends PhoneStateListener {
// 当电话设置状态发生改变的时候调用
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// [3]具体判断一下电话的状态
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:// 空闲状态
if(recorder!=null){
recorder.stop();
recorder.reset(); // You can reuse the object by going back to
// setAudioSource() step
recorder.release(); // Now the object cannot be reused
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// 接听状态
System.out.println("开始录音");
recorder.start(); // Recording is now started
break;
case TelephonyManager.CALL_STATE_RINGING:// 响铃状态
System.out.println("准备录音机");
try {
//[1]创建MediaRecorder实例
recorder = new MediaRecorder();
//[2]设置音频的来源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//[3]设置输出的格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//[4]设置音频的编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//[5]设置存放的路径
recorder.setOutputFile("/mnt/sdcard/luyin.3gp");
//[6]准备录
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
<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"/>
[6]把开启服务的逻辑放到手机重启的广播中
package com.phone.phonelistener;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//服务开启
Intent intent1 = new Intent(context,PhoneService.class);
context.startService(intent1);
}
}
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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.phone.phonelistener.PhoneService"></service>
<receiver android:name="com.phone.phonelistener.BootReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
4 使用服务注册特殊的广播接收者
操作特别频繁的广播事件 比如屏幕的解锁和锁屏
实现步骤
[1]定义广播接收者 接收屏幕解锁屏幕的事件
package com.phone.registerbroadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class ScreenReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取当前事件类型
String action = intent.getAction();
if("android.intent.action.SCREEN_OFF".equals(action)){
System.out.println("说明屏幕锁屏了");
}else if("android.intent.action.SCREEN_ON".equals(action)){
System.out.println("说明屏幕解屏了");
}
}
}
[2]写一个服务 用来注册广播接收者
package com.phone.registerbroadcast;
import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
public class ScreenService extends Service {
private ScreenReceiver receiver;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
//[1]创建ScreenReceiver实例
receiver = new ScreenReceiver();
//[2]获取IntentFilter 实例 目的是添加action
IntentFilter filter = new IntentFilter();
//[3]动态添加action
filter.addAction("android.intent.action.SCREEN_OFF");
filter.addAction("android.intent.action.SCREEN_ON");
//[4]注册服务
registerReceiver(receiver, filter);
super.onCreate();
}
@Override
public void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}
}
[3]在MainActivity的onCreate方法中开启服务
package com.phone.registerbroadcast;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this,ScreenReceiver.class);
startService(intent);
}
}
[4]配置服务
<service android:name="com.phone.registerbroadcast.ScreenService"></service>
5 bindService开启服务
[1]第一次点击按钮 会执行服务的onCreate方法和onBind方法
[2]当onBind方法返回null的时候onServiceConnected方法是不执行的
[3]第二次点击按钮 服务没有响应
[4]不求同时生 但求同时死 指的是调用者和服务之间
[5]服务不可以多次解绑 多次解绑会报异常
[6]通过bind方式开启服务 服务不能在设置页面找到 相当于是一个隐形的服务
6 为什么要引入bindService
目的是为了调用服务里的方法
7 通过bindservice方式调用 服务方法里面的过程
[1]在服务的内部定义一个方法 让activity调用
[2]在服务的内容定义一个中间人对象(IBinder)
[3]把定义的中间人对象在onBind方法里面返回
[4]在mainactivity的oncreate方法里面调用bindservice的目的是为了获取我们定义的中间人对象
[5]获取中间人对象
[6]拿到中间人对象就可以间接调用到服务里面的方法
[7]当Activity销毁的时候解绑服务
package com.phone.ban;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;
public class BanZhangService extends Service {
//把定义的中间人对象返回
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
public void banZhang(int money) {
if(money > 1000){
Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
}else{
Toast.makeText(getApplicationContext(), "这点钱还想办事....", 1).show();
}
}
//[1]定义中间人对象
public class MyBinder extends Binder{
public void callBanZheng(int money){
//调用办证方法
banZhang(money);
}
}
}
package com.phone.ban;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import com.phone.ban.BanZhangService.MyBinder;
public class MainActivity extends Activity {
private MyConn conn;
private MyBinder myBinder;//定义的中间人对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this,BanZhangService.class);
//绑定服务
conn = new MyConn();
bindService(intent, conn, BIND_AUTO_CREATE);
}
//点击按钮调用服务里办证的方法
public void click(View v){
myBinder.callBanZheng(1001);
}
//监视服务的状态
private class MyConn implements ServiceConnection{
//当服务连接成功调用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (MyBinder) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
@Override
protected void onDestroy() {
//当activity销毁的时候解绑服务
unbindService(conn);
super.onDestroy();
}
}
8 通过接口方式调用服务里面的方法
接口可以隐藏代码内部的细节 让程序员暴露自己只想暴露的方法
[1]定义一个接口 把想暴露的方法都定义在接口里面
[2]我们定义的中间人对象事项我们自己定义的接口
[3]在获取中间人对象的时候
myBinder = (Iservice) service;
补充:混合方式开启服务
需求:既想让服务在后台长期运行 又想调用服务里面的方法
[1]先调用startService方法开启服务 能够保证服务在后台长期运行
[2]调用bindService方法 去获取中间人对象
[3]调用unbindSerivce 解绑服务
[4]调用stopSerivce
9 百度音乐盒框架
10 aidl介绍
本地服务:运行自己应用里面的服务
远程服务:运行在其他应用里面的服务
实现进程间通信 IPC
aidl:Android Interface defined Language 安卓接口定义语言
专门是用来解决进程间通信的
总结:使用aidl的步骤
[1]把IService.java文件变成一个aidl文件
[2]adil这个语言不认识public 把public去掉
[3]自动生成一个IService.java文件 系统自动帮助我们生成一个类Stub(在gen目录下)
[4]我们自己定义的中间人对象直接继承Stub
[5]保证2应用的aidl文件是同一个 保证aidl文件所在的包名相同
[6]获取中间人对象的方式不一样了
IService = Stub.asInterface(service);
11 aidl的应用场景
比如 支付宝
- day08.4-samba共享网盘服务
1. 安装软件:yum install samba -y 2. 新建共享目录物理路径:mkdir /zizaijiapu 修改配置文件:vim /etc/samba/smb.con ...
- day08.3-apache网页服务
1. 安装软件:yum install httpd -y 2. 查看配置文件:vim /etc/httpd/conf/httpd.cof,其中,"Listen 80&qu ...
- day08.2-ssh远程连接服务
在Linux环境中,部署一个服务的一般步骤: a). 准备环境,包括 关闭防火墙:service iptables stop(或chkconfig iptables off) 关闭se ...
- Python面向对象进阶和socket网络编程-day08
写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...
- HTTP协议基础与web服务的重定向,跳转以及请求转发
JavaWeb中,HttpServletRequest与HttpServletResponse几乎是处理各种请求与操作必备的参数,与原始的ServletRequest/ServletResponse相 ...
- day08:软件系统的体系结构&Tomcat详解&Web应用&http协议
day08 软件系统体系结构 常见软件系统体系结构B/S.C/S 1.1 C/S C/S结构即客户端/服务器(Client/Server),例如QQ: 需要编写服务器端程序,以及客户端 ...
- python开发学习-day08(socket高级、socketserver、进程、线程)
s12-20160305-day08 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- Dubbo学习系列之六(微服务架构实战)
看了最近文章的反馈,似乎波澜不惊的样子,应该是看官觉得都是小菜,那我就直上硬菜,人狠话不多,开始!准备:Idea201902/JDK11/ZK3.5.5/Gradle5.4.1/RabbitMQ3.7 ...
- 阶段5 3.微服务项目【学成在线】_day08 课程图片管理 分布式文件系统_06-分布式文件系统研究-fastDFS安装及配置文件说明
3 fastDFS入门 3.1fastDFS安装与配置 3.1.1 导入虚拟机 对fastDFS的安装过程不要求学生掌握,可以直接导入老师提供虚拟机. 1.使用Vmware打开虚拟机配置文件“Cent ...
随机推荐
- 【设计模式】jdbc桥连接过程解析
读多少源码,便知自己有多无知! 想温习一下桥链接模式,然后觉得自己已然吃透了,因为自己写的博客,觉得还是应该更具体一些. 类似于这样的结构: 个人理解: 模式类型:概述:角色:模式的应用场景:结 ...
- ThinikPhp 将数据库模型的增、删、改操作写入日志
Thinkphp中的模型可以对数据库字段进行验证规则的设置和设置一些字段的默认值(比如字段为当前时间)以及在操作数据时的的一些回调方法等 基本上每一个模型都需要设置一些验证规则和字段默认值的设置, ...
- leetcode笔记:Validate Binary Search Tree
一. 题目描写叙述 Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is ...
- PL/SQL学习笔记之条件控制语句
一:IF-THEN语句 IF (condition) THEN commands; END IF; 二:IF-THEN_ELSE语句 IF (condition) THEN S1; ELSE S2; ...
- zabbix 中文乱码的处理
一.乱码原因 查看cpu负载,中文乱码如下 这个问题是由于zabbix的web端没有中文字库,我们最需要把中文字库加上即可 二.解决zabbix乱码方法 2.1 上传字体文件到zabbix中 找到本地 ...
- pycharm如何解决新建的文件没有后缀的问题
如下设置: 1.settings 2.file and code templates3.点击图中绿色的“+”号,即可打开新建模板页面4.定义模板名字.后缀名保存即可
- 基于Centos搭建个人 Leanote 云笔记本
系统要求:CentOS 7.2 64 位操作系统 下载启动 MongoDB Leanote 依赖 MongoDB 作为数据存储,下面开始安装 MongoDB: 下载 MongoDB 进入 /home ...
- R语言编程艺术#03#列表(list)
向量的元素要求都是同类型的,而列表(list)与向量不同,可以组合多个不同类型的对象.类似于C语言中的结构体(struct)类型. 1.创建列表 从技术上讲,列表就是向理.之前我们接触过的普通向量都称 ...
- kubernetes中port、target port、node port的对比分析,以及kube-proxy代理
转:http://blog.csdn.net/xinghun_4/article/details/50492041 容器网络实例 服务中的3个端口设置 这几个port的概念很容易混淆,比如创建如下se ...
- CodeCombat编程游戏
一. 介绍 官方网站:http://cn.codecombat.com/ 项目地址:https://github.com/codecombat/codecombat CodeCombat 是一个通过玩 ...