您的位置:首页 > 博客中心 > APP开发 >

android(二)

时间:2022-03-12 11:43

Gradle中buildToolsVersion和TargetSdkVersion的区别是什么

compileSdkVersion, minSdkVersion 和 targetSdkVersion 的作用:他们分别控制可以使用哪些 API ,要求的 API 级别是什么,以及应用的兼容模式。TargetSdkVersion 设为21那么是按6.0设置的(运行时权限),小于21是按6.0以前的方式


进程间怎么通信

binder是安卓中的一个类,它实现了IBinder接口,是安卓中跨进程通信的方式。当绑定服务的时候会返回一个binder对象,然后通过他进行多进程间的通信。

其实进程间通信就是为了实现数据共享。一个程序不同组件在不同进程也叫多进程,和俩个应用没有本质区别。使用process属性可以实现多进程,但是会带来很多麻烦,主要原因是共享数据会失败,弊端有:静态和单利失效,同步失效,sharedprefer可靠性减低等问题

Intent,Binder(AIDL),sharedpre、Messenger

  • 使用intent的附加信息extras来传递,通过bundle,传递的是bundle支持的类型,比如基本数据类型、实现pracellable或serializeable的对象
  • 使用文件共享,序列化或是sharedpre,不过不适用于读写并发的操作
  • 通过message进行传递,在远程服务里创建message对像,在onbind里返回(message.getbinder)。在客户端绑定服务,拿着message对象发消息(可以用bundle)。在远程服务的handlermessage方法就会收到。他是一个个处理的,如果大量并发请求用aidl,mrssage底层就是aidl
  • AIDL
  • socket可以实现俩个终端通信,也可以在一个设备的俩个进程通信。需要在服务里创建服务端
  • ContentProvider(进程间数据共享)和message一样,底层也是binder,除了oncreate方法其他方法(crud)都是运行在bindler线程里。所以在oncerate里不能做耗时操作。在其他应用访问通过uri(主机名),例如gercontentResolver.query(uri,null,null....)
  • 有以上6种

使用多进程显而易见的好处就是分担主进程的内存压力。我们的应用越做越大,内存越来越多,将一些独立的组件放到不同的进程,它就不占用主进程的内存空间了。当然还有其他好处,有心人会发现Android后台进程里有很多应用是多个进程的,因为它们要常驻后台,特别是即时通讯或者社交应用,不过现在多进程已经被用烂了。典型用法是在启动一个不可见的轻量级私有进程,在后台收发消息,或者做一些耗时的事情,或者开机启动这个进程,然后做监听等。还有就是防止主进程被杀守护进程,守护进程和主进程之间相互监视,有一方被杀就重新启动它。


AIDL的全称是什么?如何工作?

Android interface definition language (android接口定义语言) , 用来跨进程的访问方法。

应用场景:远程服务中的中间人对象,其他应用是拿不到的,那么在通过绑定服务获取中间人对象时,就无法强制转换,使用aidl,就可以在其他应用中拿到中间人类所实现的接口    


Aidl使用注意:

客服路径一致 接口名和文件名一致,远程服务的中间人Bind是继承XXX.Sub

Aidl文件中不要有权限修饰符,在客户端也是强转成XXX.Sub

onBind()3种返回:

1.继承Binder用它的对象返回,客户端将bind对象强转成自定义Bind

2.new一个Messenger时用Handler对象作为参数,用Messenger.getBinder()返回,客户端将bind对象强转成Messenger对象,在发送消息


支付宝远程服务

  1. 定义支付宝的服务,在服务中定义pay方法
  2. 定义中间人对象,把pay方法抽取成接口
  3. 把抽取出来的接口后缀名改成aidl
  4. 在自动生成的PublicBusiness.java文件中,有一个静态抽象类Stub,它已经继承了binder类,实现了publicBusiness接口,这个类就是新的中间人
  5. 中间人对象直接继承Stub对象,然后在onbind方法中把它返回出去
  6. 注册这个支付宝服务,定义它的intent-Filter,这样其他应用才可以访问。

需要支付的应用

  1. 把刚才定义好的aidl文件拷贝过来,注意aidl文件所在的包名必须跟原包名一致
  2. 远程绑定支付宝的服务,通过onServiceConnected方法我们可以拿到中间人对象
  3. 把中间人对象通过Stub.asInterface方法强转成定义了pay方法的接口
  4. 调用中间人的pay方法


  •     //设置本次http请求所请求的数据的区间
                    conn.setRequestProperty("Range", "bytes=" + startIndex + "-" + endIndex);
                    
                    //请求部分数据,相应码是206
                    if(conn.getResponseCode() == 206){
                        //流里此时只有1/3原文件的数据
                        InputStream is = conn.getInputStream();

    特别注意: 对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。


    coverview原理:

    这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用,在 getView()方法中进行了判断,如果 convertView为空,则使用

    LayoutInflater去加载布局,如果不为空则直接对 convertView进行重用


    layout_weight(为t),屏幕适配经常用

    等分的长度“先各自分配各自控件的长度,然后将剩余的长度按照权重的比例layout_weight的大小进行设置。

    如果父类的组件的设置为vertical,那么layout_height=0(layout_weight=1)

    如果父类的组件的设置为horionzal,那么layout_width=0(layout_weight=1)


    android的启动流程

    Android逆向工程是什么?

    Android逆向工程主要是指反编译和二次打包,通过反编译可以破解一些有用信息,而通过二次打包则可以产生一些山寨应用。Android逆向工程是一个很有意思的话题,如果开发者对其感兴趣的话,推荐大家阅读下逆向相关的书籍,比如《Android软件安全与逆向分析》。








  • 相关推荐

    电脑软件

    本类排行

    今日推荐

    热门手游