XJL's Blog

保持乐观、单纯。 要开心。

爱家人朋友,爱猫咪,爱学习。


知识点1:Android 开发过程中版本适配:

Android 4.4:

uri转path需要适配。

Android 5.0适配:

分包适配 -〉在5.0及以上在app的gradle文件中配置multiDexEnabled true即可,但是5.0以下需要倒入jar,然后在Application的attch方法中进行初始化。 ###Android 6.0适配: 动态权限处理。

Android 7.0适配:

  • Uri.fromFile()适配:使用FileProvider适配。

  • 出于安全考虑关闭了系统网络、拍照、录像广播。

    Android 7.0适配:

  • Service启动方式需要使用startForegroundService()启动服务。

  • Notification 适配:添加了渠道和组的概念。

  • Android 8.0去掉了允许未知来源,需要用户手动授权允许,Android程序需要在AndroidManifest.xml文件中添加REQUEST_INSTALL_PACKAGES权限。

知识点2:

java中equals和==的区别

基本数据类型==比较的是值是否相等,非基本数据类型==比较的是内存地址是否相等。
equals比较的是内存地址。

String、StringBuffer、StringBuilder的区别(运行速度:StringBuilder>StringBuffer>String)

String:字符串常量,每次修改都相当于生成一个新的对象,所以不适合经常变更值的场景。
StringBuffer:字符串常量,线程安全适用于多线程。
StringBuilder:字符串常量,线程不安全,适用于单线程,效率略快于StringBuffer。
速度上面String不断复制和更改是创建不同的对象来进行操作,涉及到GV垃圾回收机制,会影响速度;而StringBuffer和StringBuilder则处理同一个对象不存在JVM的GC回收。
线程是否安全:如果一个StringBuffer 对象在字符串缓冲区中被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder 的方法则没有该关键字,所以不保证线程安全、不能同步的问题。所以多线程操作时需要使用StringBuf,但是单线程情况下,为了速度,建议使用StringBuilder。

java8新特性

Lamabda表达式、接口的默认方法和静态方法、重复注解、方法引用、更好的类型推断、拓展注解应用场景、访问局部变量、Filter过滤器、Stream接口、sort排序、Map映射、DataApi。

谈谈JVM的理解

Handler机制的原理与R小Java的区别(待补充) 相同点:线程间通信。
区别:R小Java线程切换更方便(直接可以切换子线程和UI线程),Handler需要在子线程中去发消息,然后主线程中接收消息刷新UI。

广播的创建方式以及区别

静态创建动态创建 区别:动态注册快于静态注册,无论优先级高低。 动态注册周期跟随Activity的生命周期,静态注册广播为常驻型。

数据存储方式

  • Sharedpreferences(适合轻量级数据存储,采用xml键值对存储)
  • 本地文件存储
  • SQLite数据库存储
  • ContentProvider
  • 网络存储

服务启动方式以及对应生命周期的区别

  • startService (onCreate - onStartCommand - onDestory)
  • bindService (onCreate - onBind - onUnbind - onDestory)

线程间通信方式

  • 接口
  • Handler
  • 观察者模式(EventBus)
  • Android使用runOnUIThread切换到主线程
  • AsyncTask
  • BroadCast
  • SharedPreferences

进程间通信方式

  • Intent:访问其他Activity 或者隐式调用系统app
  • ContentProvider:用于多个APP共享数据
  • AIDL
  • BroadCast
  • Socket

ANR发生的情况以及如何避免

最近的文章

隐私权限政策

隐私政策 我们不会收集及以任何形式储存来自你社交网路的任何资讯或销售给广告或其它营运机构。个人信息 当你透过社交网路进行分享时,可能会要求输入帐号密码,但该资讯由Android的系统管理,应用程序不会以任何形式储存帐号密码,也不会收集及以任何形式储存您在社交网路上的任何个人资讯。隐私政策条款 使用本应用即表示您同意此隐私政策的条款和条件。如果您不同意本政策,请不要使用该应用程序。我们保留权利,在我们决定更改,修改,增加或删除本政策的部分,在任何时候请定期浏览此网页查阅任何修改。如果您继续使...…

继续阅读
更早的文章

算法与数据结构笔记

时间复杂度T(n) = O(f(n)) T(n) 标识代码执行时间;n 表示数据规模的大小;f(n) 表示每行代码执行的次数总和;O 表示代码的执行时间T(n)与f(n)表达式成正比。大O主要表示代码执行时间随数据规模增长的变化趋势。时间复杂度的分析Tips 只关注循环执行次数最多的一段代码 加法规则:总复杂度等于量级最大的那段代码的复杂度 乘法规则:嵌套代码的复杂度等于前套内外代码复杂度的乘积几种常见的时间复杂度量级(按数量级递增) 常量阶 O(1) 对数阶 O(logn) ...…

继续阅读