重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
值得买。《Android开发艺术探索》深入的讲解View的工作原理,View的事件体系,属性动画,IPC机制,JNI技术,缓存与优化等知识。作者不仅仅没有简单的堆砌文档,而是结合自身工作经验来讲解。由于这些技术属于Android进阶技术,所以不适合新手入门,比较适合进阶中高的开发的工程师。
为企业提供做网站、成都网站设计、网站优化、成都营销网站建设、竞价托管、品牌运营等营销获客服务。创新互联拥有网络营销运营团队,以丰富的互联网营销经验助力企业精准获客,真正落地解决中小企业营销获客难题,做到“让获客更简单”。自创立至今,成功用技术实力解决了企业“网站建设、网络品牌塑造、网络营销”三大难题,同时降低了营销成本,提高了有效客户转化率,获得了众多企业客户的高度认可!
AIDL是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口
AIDL可以实现跨进程的方法调用。定义进程通信接口供服务端和客户端调用。
在AIDL文件中并不是所有数据类型都可以使用。只支持下列数据类型
默认情况下AIDL的调用过程是同步的,所以不能直接进行比较耗时的操作,否则容易导致客户端ANR。如果需要进行异步操作,在服务端不需要另起线程,但是在客户端需要另起线程访问远程方法,再通过Handler通知到UI线程即可!
TaskAffinity翻译过来就是“ 任务相关性 ”,它表示了一个Activity所需要的任务栈的名字。
在平时的开发中,我们一般很少使用到TaskAffinity这个属性,也没有听说过Activity需要什么任务栈之类的。其实,在默认情况下,如果不指定TaskAffinity属性,Activity所需任务栈的名字就是 应用的名字 。
我们在一个应用中启动三个Activity,然后在Terminal中执行 adb shell dumpsys activity 命令,结果如下:
可以看到,启动的三个Activity都位于“ com.hwldzh.application ”这个任务栈中,而这个名字就是我们这个应用的包名。
接下来,我们给ThirdActivity加上TaskAffinity的属性,即在Manifest中的声明如下:
我们继续执行在Terminal中执行 adb shell dumpsys activity 命令,看ThirdActivity是否处于“com.hwldzh.ThirdActivity”的任务栈中:
可以看到ThirdActivity依然运行在以包名为名字的任务栈中。这说明了 在启动模式为Standard下,单独使用TaskAffinity属性是无效的 。
我们在ThirdActivity的Manifest声明中加上SingleTask启动模式:
然后执行 adb shell dumpsys activity 命令,得到如下结果:
在将ThirdActivity的启动模式改为SingleTask之后,可以看到ThirdActivity启动的时候创建了一个新的任务栈,并且该任务栈的名字为TaskAffinity属性设置的“com.hwldzh.ThirdActivity”。
所以,当TaskAffinity和SingleTask启动模式配对使用时,它是具有该模式的Activity的目前任务栈的名字,待启动的Activity会运行在名字和TaskAffinity相同的任务栈中。
allowTaskReparenting属性的作用是Activity的迁移。当allowTaskReparenting属性和TaskAffinity配合使用时,Activity可以从一个任务栈迁移到另一个任务栈。
迁移的规则是:从一个与该Activity TaskAffinity属性不同的任务栈中迁移到与它TaskAffinity相同的任务栈中。
举个例子:当一个应用A启动了应用B的某个Activity后,如果这个Activity的allowTaskReparenting属性设置为true,那么当应用B被启动,此Activity会直接从应用A的任务栈转移到应用B的任务栈中。
具体点来说,现在有两个应用A和B,A启动了B的一个Activity C,然后按Home键回到桌面,然后再单击B的桌面图标,这个时候不是启动了B的主Activity,而是重新显示了已经被应用A启动的Activity C。我们也可以理解为,C从A的任务栈转移到了B的任务栈中。
可以这么理解,由于A启动了C,这个时候C只能运行在A的任务栈中,但是C属于B应用,正常情况下,它的TaskAffinity值肯定不可能和A的任务栈相同,所以当B启动后,B会创建自己的任务栈,这个时候系统发现C原本想要的任务栈已经创建了,所以就把C从A的任务栈中转移过来了。
1、《Android开发艺术探索》