2021-02-08笔记

Android Studio各种版本简单说明

compileSdkVersion 指定编译你的App时使用的Android API版本,应该是Android最新的稳定版本(30,即11.0对应的版本号);
buildToolsVersion 选择跟compileSdkVersion同一个大版本下的最新稳定版本即可(30.0.0);
minSdkVersion 指定了App运行所需最低的API级别,比如你设置它为23(Android 6.0);
targetSdkVersion 如果没有设置,则默认值为minSdkVersion。当你设置了targetSdkVersion的时候,如果系统的API级别高于应用的目标版本,则系统会启用兼容性行为来确保应用在更高版本系统上的运行。只要你写的程序比较规矩,没有太多的官方推荐外的行为,那么一个老版本的应用放在几年后的Android新设备上依然能顺利运行。(详解compileSdkVersion、minSdkVersion、targetSdkVersion及buildToolsVersion,让选择不再迷茫 | KaelLi的博客

总结:

  1. maxSdkVersion直接放弃。
  2. minSdkVersion根据不同版本占有率和应用面向用户的群体特征来安排。
  3. targetSdkVersion和compileSdkVersion一般都直接用最新的稳定版本即可。
  4. buildToolsVersion则使用跟compileSdkVersion大版本相同的最新稳定小版本。

2018年夏季面试题

1.activity四种启动模式、生命周期、onRestart何时调用

2.Handler机制

3.Http请求的过程、handler是什么

4.Picasso,Fresco三级缓存的缓存机制

5.dp定义,手机是多少dp的,三套切图分别多大

6.AsyncTask的缺点:是封装好的(线程池,不要用于多线程中会产生阻塞,最多同时运行5个线程)

7.TCP/IP网络架构五层:应用层(Http)、传输层(TCP,UDP)、网络层(IP)、数据链路层、物理层。数据链路层和物理层合叫网络接口层,也即四层模型。OSI(Open System Interconnect开放式系统互联)七层模型:五层+表示层+会话层。

tcp是传输层,http是应用层;http是基于tcp连接的,即tcp是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输;http是用来收发数据的,即是从实际应用上来的。

发送一个Http请求给S,这个请求包括:(1)request header包括请求的方法、请求的url,协议版本;请求的数据和编码格式;是否有cookie,是否有缓存等。(2)request body 响应的内容,包括JS等

8.性能优化:(1)布局优化:删除无用控件和层级,有选择地使用性能较低的ViewGroup、<include><merge>ViewStub;(2)绘制优化 onDraw中不创建新的局部对象,不要做耗时的任务;(3)内存的泄露优化 静态变量和单例模式导致的;(4)响应速度优化 避免在主线程做耗时操作;(5)ListView和Bitmap优化;(6)线程优化 采用线程池。

9.ANR:即应用程序无反应,当操作在一段时间内无法得到系统回应时就会出现ANR错误,造成ANR的主要原因是由于线程的任务在规定的时间内没有完成造成的。

10.桌面启动一个应用时,程序的入口在哪?从桌面上的应用图标是由Launcher启动的,其他的app安装后,会在Launcher上出现一个相应的图标。

11.系统ViewGroup上有一个view的点击事件失效,要怎么操作

12.Glide是如何加载图片的,自己写的话怎么写,Glide和Picasso,fresco等的区别,图片除了使用Resource,还有其他格式吗

【感悟:一个好的基础对大公司开发新功能、使用新框架而言非常重要(学习能力&&发展潜力)】

13.Handler新建和移除消息:只能通过Handler机制更新UI是为了解决多线程并发问题,handler机制更新UI的操作都是在主线程的消息队列中去轮询处理的;Handler负责发送消息,Looper负责接收handler发送的消息,并直接把消息回传给handler自己,MessageQueue就是一个存储消息的容器。

14.设计模式

15.Android开发模式(MVP),框架原理(Retrofit,Rxjava,Picasso)

16.网络通信机制,socket通信,tcp/ip

17.事件传递,自定义UI控件

18.内存管理机制、进程管理机制、任务管理机制

19.自定义view的使用,搜索框继承自什么是怎么实现的

20.用递归思想实现字体自动充满控件,键入文字的监听怎么做

21.Glide、picasso和fresco的区别

22.跳到另一个App后连续打开好多页面,然后点击返回键回到上一个App可以吗

23.登录注册时的图片验证码怎么做?

24.在上线前应做哪些测试

25.activity中 android:exported属性,若有intent-filter默认为true,无intent-filter默认为false

26.自定义权限:工程A定义声明自定义权限,工程B添加A中的自定义权限,则B可以调起A。

27.install分三步完成(1)push apk文件到/data/local/tmp;(2)调用pm install 安装;(3)删除/data/local/tmp下对应的apk

28.Java基础、计算机网络、IO、虚拟机、集合java容器、内存

29.原子操作:不可被中断的一个或一系列操作。在数据库操作中,一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务。比如:经典的银行转账场景。

例如在银行的转帐事务中,假定张三从自己的帐号上把1000元转到李四的帐号上,相关的sql语句如下:

update account set monery=monery-1000 where name='zhangsan'

update account set monery=monery+1000 where name='lisi'

这个两条语句必须作为一个完成的事务来处理。只有当两条都成功执行了,才能提交这个事务。

快手面试

1.手指触控一个按钮(特别小),但是想增大它的可点范围,它周边的其他控件位置不受影响。注意它的父控件类型不确定,其位置和点击事件是不好加的。

2.Handler机制中Handler、MessageQueue、Looper分别是干什么的

3.事件分发机制,说说view和viewgroup

4.Activity和service是如何通信的

5.点击应用图标到应用启动,具体有哪些过程

6.定时或延时怎么做

7.for循环

小米面试

1.多线程

2.算法和代码编写能力

3.设计模式

看源码,会封装

1.协程:kotlin里面的一个线程框架。volley、xutils的网络框架早已经过时了,retrofit+okhttp+协程/rxjava   优雅快速。用同步代码的格式实现了异步执行+kotlin(compose)+多个api的同时异步请求加上返回结果的同步合并。前提是先学会kotlin和compose。

2.每天是有长进的,学饱了走的。

3.retrofit的优点:注解 +动态代理,对网络请求进行了优雅统一的封装。Gson过时了,现在改用Moshi了。Moshi的优点 性能更好codegen是gson的三倍,天生支持kotlin的空安全,包更小。4.okhttp的原理 三个队列,五个连接器。

5.tools属性

android中xml tools属性详解 - 泡在网上的日子

6.通过 bugreport 查询功耗问题

adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset
设备 使用一段时间,或者休眠一段时间
adb bugreport 
adb shell dumpsys batterystats --disable full-wake-history

把生成的bugreport 上传到
https://bathist.ef.lc/ 即可

adb shell 常用命令

注意使用前提要保证手机有root权限

1. 获取手机中执行Monkey的进程号 :

        adb shell pgrep commands.monkey

2. 查看前台显示的Activity:

        adb shell dumpsys window | grep mCurrentFocus

3. 获取手机的分辨率:

        adb shell wm size

4.飞行模式开:

        adb shell settings put global airplane_mode_on 1

         adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true

5. 飞行模式关:

        adb shell settings put global airplane_mode_on 0

        adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

6. 设置灭屏时间(单位毫秒):

        adb shell settings put system screen_off_timeout 30000

7. 自动亮度关:

        adb shell settings put system screen_brightness_mode 0

8. 方向锁定开:

        adb shell settings put system accelerometer_rotation 0

9. 方向锁定关:

        adb shell settings put system accelerometer_rotation 1

另:禁用自动旋转(等同于方向锁定开)

adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0
设置为横屏

adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:1
设置为竖屏:

adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:0

10. WIFI开:

        adb shell svc wifi enable

11. WIFI关

        adb shell svc wifi disable

12. NFC开

        adb shell svc nfc enable

13. NFC关

        adb shell svc nfc disable

14. BT开

        adb shell service call bluetooth_manager 6

15. BT关

        adb shell service call bluetooth_manager 8 i32 1

16. 关闭GPS(回到低耗电量):

        adb shell "settings put secure location_providers_allowed -gps"

17. 开启GPS(回到高精确度):

        adb shell "settings put secure location_providers_allowed +gps"

18. 拨打电话

        adb shell am start -a android.intent.action.CALL -d tel:10086 

19. 清除batterystatus:

        adb shell dumpsys batterystats --reset

20. 获取机器开机时长

        adb shell cat /proc/uptime

21. 获取当前手机的电量百分比:

        adb shell cat /sys/class/power_supply/battery/capacity

22. 获取当前手机的电池容量大小:

        adb shell cat /sys/class/power_supply/bms/charge_full_design

23. 获取实时电池端输出的电流:

        adb shell cat /sys/class/power_supply/battery/current_now

24. 获取实时电池端的输出电压:

        adb shell cat /sys/class/power_supply/battery/voltage_now

25. 获取当前wake_lock:

        adb shell cat /sys/power/wake_lock

26. 设置自定义的wake_lock(设置完之后手机不能深睡):

        adb shell "echo  test > /sys/power/wake_lock"

27. 获取当前屏幕是否点亮:

        adb shell dumpsys power | grep Display

28. 强制退出某个应用:

        adb shell am force-stop com.android.settings

29. 清除某个应用的所有数据:

        adb shell pm clear com.android.settings

30. 打开某个应用:

        adb shell am start com.android.settings/.MainSettings

31. 清除logcat信息:

        adb logcat -c

32. 查看logcat 并过滤关键字:

        adb logcat | grep LAUNCHER

33. 获取当前手机的配置信息:

        adb shell getprop   

34. 获取当前手机的亮度(不同手机节点可能不一样):

        adb shell cat /sys/class/backlight/panel0-backlight/brightness

        或 adb shell cat /sys/class/leds/lcd-backlight/brightness

        或 adb shell cat /sys/class/backlight/lcd-backlight/brightness

35. 获取当前CPU频率:

        比如8核手机0-3是小核,4-7是大核

        查看小核实时频率 adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

        查看大核实时频率 adb shell cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq

36. 获取CPU可用频率的档位:

        查看小核实时频率 adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

        查看大核实时频率 adb shell cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_available_frequencies

37. 模拟点击:

        adb shell input tap 100 200

38 . 输入框输入文本:

        adb shell input text abcdefg

39. 模拟滑动

        adb shell swipe 100 100 500 500

40. 下发keyevent事件

        adb shell input keyevent 3

        常用的事件:

        KEYCODE_HOME=3;

        KEYCODE_BACK=4;

        KEYCODE_CALL=5;

        KEYCODE_ENDCALL=6;

        KEYCODE_0=7;

        KEYCODE_1=8;

        KEYCODE_2=9;

        KEYCODE_3=10;

        KEYCODE_4=11;

        KEYCODE_5=12;

        KEYCODE_6=13;

        KEYCODE_7=14;

        KEYCODE_8=15;

        KEYCODE_9=16;

        KEYCODE_VOLUME_UP=24;

        KEYCODE_VOLUME_DOWN=25;

        KEYCODE_POWER=26;

        KEYCODE_CAMERA=27;

41. 打开手机中的视频音频文件

    adb shell am start -a android.intent.action.VIEW -t audio/* -d file:///sdcard/Alarms/XXXX.mp3

    adb shell am start -a com.miui.videoplayer.LOCAL_VIDEO_PLAY -d file:///sdcard/Alarms/XXXXX.mp4(小米手机自带播放器)

42. 浏览器打开指定网页

     adb shell am start -a android.intent.action.VIEW -d www.baidu.com -n com.android.browser/.BrowserActivity(手机自带浏览器)

43. dump当前页面的xml信息

adb shell uiautomator dump --compressed (--compressed当前窗口的UI布局简化信息)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值