1、服务的两种启动方式
startService启动 —— 该服务所在进程会变成服务进程,服务于启动它的Activity没有关系。不能调用服务里的方法
——生命周期: onCreate() --> onStartCommand() --> onDestroy()
bindService启动 —— 进程优先级不变,原来是怎样就是怎样,不能做后台运行,容易被杀掉。绑定的服务与Activity是同生共死的,Activity销毁了,服务也销毁了,不过服务销毁了,Activity不会销毁。可以调用服务里的方法
——生命周期:onCreate --> onBind --> onUnbind --> onDestroy
2、办证程序实现过程(即如何调用Service中的方法)
<1> 创建一个Service并在清单文件中配置
<2> 创建一个中间内部类,继承Binder(IBinder接口的实现类),在这个类中调用服务中的方法
<3> 返回这个IBinder对象,即中间人对象
<4> 在Activity中,在onServiceDisconnected()方法中得到对象
3、也可以把多种方法写在接口中
4、外部类.this.play() 表示调用外部类的方法
5、混合启动顺序:startService() --> bindService() --> unbindService() --> stopService()
6、 service对象可以强转成类名,也可以强转成定义的接口名,下面这种方法可以使服务里自定的方法私有化,只要接口中不包含你自定义的方法
mf = (MusicInterface) service;
7、广播可以用代码注册,但是服务还是得用清单文件注册
8、ServiceConnection()方法中的onServiceConnected()方法是在onBind有返回值此方法才调用,其中service 这个对象就是onBind返回的中间人; onServiceDisconnected()方法是在连接因为异常而中止才调用,正常中止不调用
9、AIDL —— Android interface definition language(安卓接口定义语言)
作用:跨进程通信
应用场景:远程服务中的中间人对象,其他应用是拿不到的,那么在通过绑定服务获取中间人对象时,就无法强制转换,使用aidl,就可以在其他应用中拿到中间人类所实现的接口
步骤:<1> 把接口文件的后缀名改为.aidl
<2> aidl文件中所有的东西都是public的,不需要也不能自己定义访问修饰符
<3> 中间人对象继承Stub(抽象类),Stub对象已经继承了Binder并实现了PublicBusiness接口
在另一个项目中要把上面的aidl拷过来,包名也要一样 —— 获取到的中间人对象使用Stub.asInterface强转
10、Android studio 使用aidl的方法
<1> 选中你要使用的包名,单击右键,新建一个AIDL文件
<2>写上你要实现的方法
<3>Build --> Make Project,既可以生成相应的java文件,文件目录:app --> build --> generated --> source --> aidl --> debug
11、远程支付 --> 一个远程支付接口 + 支付界面 (不在同一个项目下面)
12、—— android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置
—— android:layout_gravity 是用来设置该view相对与父view 的位置.比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置
13、如果一个样式(比如显示文字的大小,颜色,位置等)要多次使用,就可以在values中的styles.xml 中定义一个style,如下举例:
<style name="Title"><item name="android:layout_width">match_parent</item><item name="android:layout_height">wrap_content</item><item name="android:textSize">30sp</item><item name="android:gravity">center</item><item name="android:layout_marginTop">20dp</item><item name="android:textColor">#ef1414</item></style>
如果想改变其中的一个属性,就可以使用继承,这里有两种方式,一般用第二种:
<style name="Titles" parent="Title"><item name="android:textSize">10sp</item></style><style name="Title.MyTitles">
<item name="android:textColor">#1410f4</item></style>
主题【在清单文件中使用】定义和样式【在布局文件中使用】定义相同,只是应用场景不一样
14、国际化 --> 国际化后可支持各种语言等
实现步骤: <1> 定义显示内容,在values --> strings.xml中
<2>创建要国际化的包名,命名规则也要国际化,比如values-en,要严格要求
<3> 定显示内容,可以直接把前面的strings.xml复制,然后修改
图片也可国际化,同上