Activity生命週期流程圖
不同場景下Activity生命週期的變化過程
啓動Activity: onCreate() -> onStart() -> onResume() Activity進入運行狀態。
Activity退居後臺: onPause() -> onStop() 進入停滯狀態。
Activity 返回前臺: onRestart() -> onStart() -> onResume() 再次回到運行狀態。
系統內存不足,Activity退居後臺,會被系統kill掉,再次返回這個Activity:onCreate() -> onStart() -> onResume()
锁定屏与解锁屏幕 只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()
Android中的動畫有哪些,區別是什麼:
逐幀動畫(Drawable Animation):
加載一系列Drawable資源來創建動畫,即播放一系列圖片來實現動畫效果,可以自定義每張圖片的持續時間
補間動畫(Tween Animation):
Tween 可以對View對象實現一系列簡單的動畫效果,比如位移,縮放,旋轉,透明度等等。但是它並不會改變View屬性的值,只是改變了View的繪畫萬位置,
比如,一個按鈕在動畫過後,不再原來的位置,但是觸發點擊事件的仍然是原來的座標。
屬性動畫(Property Animation):
动画的对象除了传统的View对象,还可以是Object对象,动画结束后,Object对象的属性值被实实在在的改变了
數據持久化的四種方式:
文件存儲:通過 java.io.FileInputStream 和 java.io.FileoutputStream 這兩個類來實現對文件的讀寫,java.io.File類則用來構造一個具體指向某個文件或文件夾對象。
SharedPreferences:這是一種輕量級的數據存儲機制,他將一些簡單的數據類型的數據,包括boolean類型,int類型,float類型,long類型以及String類型的數據,
以鍵值對的形式存儲在應用程序的私有Prefernces目錄(/data/data/<包名>/shared_prefs/)中。
SQLite數據庫:當應用程序需要處理的數據量比較大時,爲了更加合理地存儲、管理、查詢數據,我們往往使用關係數據庫來存儲數據。
ContentProvider:主要用於在不同的應用程序之間實現數據共享功能,內容提供可以選擇只對哪一部分數據進行共享。
Context 與 ApplicationContext 的區別,分別用於什麼情況下
Application的Context是一個全局靜態變量,SDK的說明是只有當你引用這個context生命週期超過了當前Activity的生命週期,而和整個應用的生命週期掛鉤時,纔去使用這個application的context。
在android中context可以作很多操作,但是最主要的功能是加載和訪問資源。在android中有兩種context,一種 application context,另一種 activity context,
通常我們在各個類和方法間傳遞的是activity context。
什麼是ANR(Application Not Responding,程序未响应)
在Android里,应用程序的响应性是由Activity Manager和Window Manager系统服务监视的。
当它监测到一下情况中的一个时,Android就会针对特定的应用程序显示ANR:
应用在5秒内未响应用户的输入时间,BroadcastReceiver未在10秒内完成相关的处理
ANR是怎么引起的?
主线程中存在耗时的计算
主线程被IO操作(从4.0之后耗时操作不能在主线程中进行)
主线程中错误的操作,如Thread.wait 或者 Thread.sleep等
如何避免ANR问题的出现
- 基本思路就是把一些耗时操作放到子线程中处理
- 使用AsyncTask处理耗时IO操作。
- 降低子线程优先级使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。
- 使用Handler处理子线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。
- Activity的onCreate和onResume回调中尽量避免耗时的代码
- BroadcastReceiver中onReceive代码也要尽量减少耗时操作
- 建议使用IntentService处理。IntentService是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题
什么是 OOM(Out of Merrory,内存泄漏)
android 系统的每一个应用程序都设置一个硬件的Dalvik heap Size最大限制阙值,如果申请内存资源超过这个限制,系统就会抛出OOM错误