zoukankan      html  css  js  c++  java
  • Android 面試題

    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()来阻塞主线程。
    • ActivityonCreateonResume回调中尽量避免耗时的代码
    • BroadcastReceiveronReceive代码也要尽量减少耗时操作
    • 建议使用IntentService处理。IntentService是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题

    什么是 OOM(Out of Merrory,内存泄漏)

    android 系统的每一个应用程序都设置一个硬件的Dalvik heap Size最大限制阙值,如果申请内存资源超过这个限制,系统就会抛出OOM错误

  • 相关阅读:
    CentOS安装Maven
    多线程好文推荐
    [转]HashMap详解
    [转]Nginx介绍-反向代理、负载均衡
    数据库连接池内存泄漏问题的分析和解决方案
    RocketMQ文章
    [转]35张图就是为了让你深入AQS
    Jenkins总结1-部署jenkins
    理解SQLAlchemy的表继承关系(4)--高级应用
    理解SQLAlchemy的表继承关系(3)-Concrete Table Inheritance
  • 原文地址:https://www.cnblogs.com/NigelX/p/6557930.html
Copyright © 2011-2022 走看看