关于Android工程师面试题
singletask:栈内复用模式。不是在当前任务栈中查找是否存在,实际过程如下:
查找该Activity所需的任务栈是否存在(由taskAffinity控制,或者默认为包名)。
在任务栈当中查找该Activity是否存在。
这里面存在任务栈的切换,也就是当开启的singtask类型的Activity不属于当前任务栈时,则会切换到其任务栈。
singleInstance:单实例模式。
包含了singleTask的所有特性,另外加上:设置为该模式的Activity,只能单独存在于一个任务栈中。当有两个singleInstace的Activity设置成同样的任务栈时,会出现两个同名的任务栈,分别用来存放同名的Activity。
注:在任何跳转的时候,首先调用本Activity的onPause,然后跳转。如果被跳转的activity由于启动方式而没创建新的实例,则会先调用onNewIntent,然后按照正常的生命周期调用。
如
1:A→B,A:onPause;B:onCreate,onStart,onResume。
2:A(singleTop)→A,A:onPause;A:onSaveInstanceState;A:onResume。
3、View的绘制
推荐郭霖大神的博客:
https://blog.csdn.net/guolin_blog/article/details/16330267
4、canvas的使用
推荐以下博客:
https://blog.csdn.net/qinjuning/article/details/6936783
5、ActivityManagerService的相关知识点
推荐以下博客:
https://wiki.jikexueyuan.com/project/deep-android-v2/activity.html
6、Activity切换时生命周期交集
Activity之间的协作当一个activity A启动了另外一个activity B,它们的生命周期是有交叉的;
首先A的onPause()被调用;
之后B的onCrate(), onStart()及onResume() 方法会被调用(此时B拥有用户焦点);
最后,如果A在屏幕上不可见,onStop()方法被调用;
因此,我们在两个activities中传递数据,或者共享资源时(如数据库连接),需要在前一个activity的onPause()方法而不是onStop()方法中进行;
7、Hybrid(重要加分项)
java和JS的交互
https://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/
https://rensanning.iteye.com/blog/2043049
WebView开启JavaScript脚本执行
WebView设置供JavaScript调用的交互接口。
8、网络编程
volley
https://bxbxbai.github.io/2014/09/14/android-working-with-volley/
https://blog.csdn.net/guolin_blog/article/details/17656437
如何控制TCP连接时的拥塞
https://blog.csdn.net/yechaodechuntian/article/details/25429143
三次握手
https://blog.csdn.net/whuslei/article/details/6667471
Android客户端和服务端如何使用Token和Session
https://wyong.blog.51cto.com/1115465/1553352
移动端获取网络数据优化的几个点连接复用 :
节省连接建立时间,如开启 keep-alive。
对于 Android 来说默认情况下 HttpURLConnection 和 HttpClient 都开启了 keep-alive。只是 2.2 之前 HttpURLConnection 存在影响连接池的 Bug,具体可见:Android HttpURLConnection 及 HttpClient 选择
请求合并:
即将多个请求合并为一个进行请求,