Android面接に関する基礎知識


一、Activityライフサイクル
1、Activityの4つの状態
running:Activity      ,         
pause:Activity    ,          ,         ,      
stopped:Activity   ,     ,        ,    
killed:Activity   

2、Activityライフサイクル
Activity  ->onCreate()->onStart()(  )->onResume(    )
     ,(Activity   )->onPause(    )->onStop(   )
      Activity->onReStart()->onStart()->onResume()
    Activity->onPause(    )->onStop(   )->onDestory()

3、Androidプロセス優先度
  、  、  、  、 
    :          
    :        
    service       
    :       ,    home ,              
   :         ,         

二、Activity起動モード
standard:     Activity     Activity,                
singleTask:    Activity       ,    ,      ,          Activity
singleTop(    ):    Activity    ,      ,    
singleInstance:          ,         

三、Schemeジャンププロトコル
AndroidのSchemeはページ内ジャンププロトコルで、Schemeプロトコルをカスタマイズすることで、アプリの任意のインタフェースにジャンプできます.
          APP  
APP    Scheme      APP  
    H5     APP    

URL Scheme        4 :
         ,                      
H5      ,          APP        
APP          PUSH     ,                 
APP  URL       APP    

//    
Uri.parse("qh://test:8080/goods?goodsId=8897&name=fuck")
qh  Scheme    
test  Scheme      
8080         
goods        (  )
goodsId name        
//    
Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse("qh://test:8080/goods?goodsId=8897&name=fuck"));
                startActivity(intent1);

四、FragmentPageAdapterとFragmentStatePageAdapter
Androidではfragmentによく使われるのがviewpagerネストFragmentですが、Fregmentのアダプタを使う場合、FragmentPageAdapterとFragmentStatePageAdapterの2つの使い方があります.どちらかというと、ソースコードを見ると、FragmentStatePageAdapterのdestroyメソッドではfragmentの処理がremove、FragmentPageAdapterではdetach、detachはfragmentを破棄せず、分離しただけである.FragmentStatePageAdapterは回収メモリであるため、使用する場合、fragmentが多い場合はFragmentStatePageAdapterを使用すべきであり、少ない場合はFragmentPageAdapterを使用する
五、BroadcastReceiver面接関連
1、BroadcastReceiver内部実現メカニズム
1、        BroadcastReceiver,    onRecvice()  

2、  Binder   AMS    
//(Binder  :Android        ,      C/S  ,       ,             )
//(Activity Manager Service:  APP        ,                 ,      )
3、       Binder   AMS    

4、AMS       IntentFilter,     BroadcastReceiver,      BroadcastReceiver      

5、         ,   BroadcastReceiver onReceive()  

2、LocalBroadcastManager詳細
1、普通の放送を使うのはプロセスをまたいで通信することに相当し、他の人が私たちのアプリを逆コンパイルして、私たちの放送のactionを見つけて、それから自分で同じ放送を出していくつかの安全ではないことをする可能性があるので、考えてから、LocalBroadcastManagerを使うことができて、この放送はアプリの内部で伝播するだけで、外部の影響を受けないので、安全で効率的です
2、LocalBroadcastManagerの効率的な原因は内部のソースコードの中でhandlerを使って実現することを見ることができて、彼のsendbroadcastは実はhandlerを利用して1つのメッセージを送信して、私达の使ったシステムの放送は主にBinderで実習して、効率は少し遅いです;
3、LocalBroadcastManagerの内部は主にこの2つのhashMap:mReceiversとmActionsであり、もう1つは放送を受信する対象のオブジェクトの集合mPendingBroadcastsを格納する.
六、Webview面接関連
1、API 16およびそれ以前のバージョンに脆弱性があり、webviewのaddJavscripInterfaceメソッドを使用すると、ローカルのJavaインタフェースを反射操作できるように攻撃しています.安全ではありません.2、webviewがレイアウトファイルに動的に追加され、activityが破棄されると、まずremoveがwebviewをレイアウトに落とします.そうしないとメモリが漏れてしまいます.3、webviewで操作したり、多くのページをジャンプしたりする必要がある場合、WebChromeClientを使ったほうがいいです.WebviewClientではなくProgressChanggeonPageFinished 4、webviewがロードされると、バックグラウンドでいくつかのスレッドが開き、現在のactivityを終了するときは、onDestroyでwebviewオブジェクト5、webviewハードウェア加速を回収してインタフェースレンダリングの問題を引き起こし、加速6を一時的に閉じ、webviewによるメモリ漏洩の問題を解決するしかなく、webviewが開いているスレッドはactivityで実行され、activityはスレッドのライフサイクルを確定できない.メモリ漏洩の原因になる可能性があります.独立してwebviewを操作し、終了時にプロセスを殺してメモリ漏洩を防ぐことができます.