横竖屏切换时候Activity的生命周期的总结
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
https://www.cnblogs.com/wjhblogs/p/4688918.html
ANR
1、 ANR的定义:
- 在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。
- 一般说来,如果应用程序不能响应用户输入的话,系统会显示一个ANR。例如,一个应用程序阻塞在一些I/O操作上(通常是网络访问),这时,应用程序的主线程就不能再处理用户的输入事件。经过一定的时间后,系统认为应用程序已经挂起,并显示ANR来让用户选择杀死应用程序。
2、什么引发了ANR?
- 在Android里,应用程序的响应性是由Activity Manager和
Window Manager系统服务监视的。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR:
1、 没有响应输入的事件(如,按键按下,屏幕触摸)(5s)
2、 BroadcastReceiver在10秒内没有执行完毕(10s)
3、Service在规定的时间内无法处理完成(20s)
3、如何解决
将所有耗时操作,比如访问网络,Socket 通信,查询大量 SQL 语句,复杂逻辑计算等都放在子线程中去,然后通handler.sendMessage、runonUITread、AsyncTask 等方式更新 UI。无论如何都要确保用户界面操作的流畅度。如果耗时操作需要让用户等待,那么可以在界面上显示进度条。如何调试ANR?
- DDMS输出的LOG可以判断ANR发生在哪个类,但无法确定在类中哪个位置
- 在/data/anr/traces.txt文件中保存了ANR发生时的代码调用栈,可以跟踪到发生ANR的所有代码段
- adb pull 来pull traces文件到电脑上
JAVA内存中数组是怎样存放的?
https://www.cnblogs.com/chenpi/p/5489732.html
https://www.cnblogs.com/lxp503238/p/7007126.html
Android中数据存储方式
1 使用SharedPreferences存储数据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据
https://www.cnblogs.com/pxsbest/p/5068482.html
在两个 Activity 之间传递对象还需要注意什么呢?
Intent 中的 Bundle 是使用 Binder 机制进行数据传送的。能使用的 Binder 的缓冲区是有大小限制的(有些手机是 2 M),而一个进程默认有 16 个 Binder 线程,所以一个线程能占用的缓冲区就更小了( 有人以前做过测试,大约一个线程可以占用 128 KB)。所以当你看到 The Binder transaction failed because it was too large 这类 TransactionTooLargeException 异常时,你应该知道怎么解决了。
序列化的作用,以及Android两种序列化的区别
序列化:对象 --> 字节流 反序列化:字节流–>对象
区别:
Serializable Java中序列化接口 IO读写存储在硬盘上 利于数据持久化 效率不高
Parcelable Android中序列化接口 效率高 在内存中读写 使用麻烦 (AS有相关插件 一键生成所需方法)
http://blog.qianlicao.cn/technology/2016/01/17/Parcelable2/
https://www.cnblogs.com/liushilin/p/7977424.html
https://www.cnblogs.com/leipDao/p/8022063.html