日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android面试详解

發布時間:2023/12/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android面试详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

前臺就是和用戶交互的進程

可見進程例如一個activity被一個透明的對話框覆蓋,該activity就是可見進程

服務:service進程

后臺一個activity按了home按鍵就是從前臺退回到后臺

?

標準模式:不管任務棧是否存在相同的activity都會創建一個新的activity存儲在任務棧中

Singletop棧頂復用模式創建的activity在棧頂就不用創建該activity

?

站內復用模式:只要任務棧內存在該activity,就不用創建該activity,將該activity置于棧頂,該activity以上的activity都從任務棧中移除銷毀掉出去,會回調onnewIntent方法

?

最近由于工作需要,使用Scheme方式自定義URL來跨應用間調用,踩了一些坑,現在記錄一下。

1、Scheme方式配置

manifest中配置能接受Scheme方式啟動的activity

最近由于工作需要,使用Scheme方式自定義URL來跨應用間調用,踩了一些坑,現在記錄一下。

1、Scheme方式配置

manifest中配置能接受Scheme方式啟動的activity

如果需要配置能被js調起,一定要配置下面這句

  • <category?android:name="android.intent.category.BROWSABLE"></category>??
  • android:scheme="app"表示配置接受的協議為app,相當于http://www.baidu.com中的http或者https ?
  • android:host="test"表示配置接受的域名為test,相當于http://www.baidu.com中的www.baidu.com ?
  • 2、使用URL調起Activity
  • Uri?uri=Uri.parse("app://test");??
  • Intent?intent=new?Intent(Intent.ACTION_VIEW,uri);??
  • startActivity(intent); ?3、使用js調起Activity
  • window.location?=?"app://test"; ? ?
  • 通過推送,接受到需要打開的url
  • ?

    ?

    ?

    前者適合頁面較少,并沒有實現真正的內存回收,后者適合頁面較多實現了內存真正的回收

    ?

    fragment調用activity的方法,直接獲得getactivity進行調用

    activity調用fragement的方法,在fragment中實現接口,在activity中調用接口對象

    fragment A調用fragment B的方法,通過getactivity的的findFragment進行調用

    ?

    service和broadcast都是運行在主線程上,如果service要做耗時操作,可以開啟線程的方式,列如在service中訪問網絡都需要開啟線程

    Service 中的onStartCommand()必須返回一個整數.這個整數描述了在系統殺死它的事件中系統如何繼續這個服務onStartCommand()也返回值必須是下面常量之一:

    • START_NOT_STICKY

        如果系統在onStartCommand()返回后殺死了服務,不要重新創建這個service,除非還有掛起的intent需要被傳送.這是避免在不必要時運行你的service和當你的應用可以簡單重啟任何未竟的工作時的最佳選擇.

    • START_STICKY

        如果系統在onStartCommand()返回后殺死了這個service,會重新創建這個service并且調用onStartCommand(),但是不再重新發送上次最后一個intent,而是使用一個nullintent調用onStartCommand(),除非有一些掛起的intent,在此情況下,這些掛起的intent被派送.這適合于媒體播放器(or或相似也的服務),它不執行命令,但是無限期的運行并等待一個工作.

    • START_REDELIVER_INTENT

        如果系統在onStartCommand()返回后殺死了service,重新創建這個service并且使用上次最后一個intent調用onStartCommand().任何掛起的intent都順序地被派送.這適合于活躍地執行一個工作并且應被立即恢復的服務,比如下載一個文件

    在service中發送廣播通知activity,不讓service和activity直接交互

    ?

    同一一個app不同組件的通信

    ?

    動態注冊一定要在activity的ondestory中銷毀,否則會內存泄露

    動態注冊的聲明周期和activity一樣,activity銷毀廣播就銷毀

    靜態注冊即使activity銷毀了,也能收到廣播

    binder比傳統的進程的上面更加高效,binder能夠進行身份的安全性檢查

    ?

    在生成handle對象的時候,每一個線程擁有自己的創建了threadLocal對象一個loop對象和一個消息隊列,主線程才能更新UI,handler的創建必須在主線程中,looper從消息隊列中獲得消息,然后由handle來發送,有handle的

    hanleMessage方法來處理,處理完成之后返回給Loper繼續執行,在取出消息隊列

    ?

    解決handle內存泄露的問題

    第一講handle定義成static類型

    第二在activity的ondestory中調用handle.removecall方法

    第三:采用弱引用的訪問在handle內部持有activity的對象

    通過上面的三種方式,能百分之90%解決handle的內存泄露

    ?

    ?

    總結:

    View繪制分三個步驟,順序是:onMeasure,onLayout,onDraw。經代碼親測,log輸出顯示:調用invalidate方法只會執行onDraw方法;調用requestLayout方法只會執行onMeasure方法和onLayout方法,并不會執行onDraw方法。

    所以當我們進行View更新時,若僅View的顯示內容發生改變且新顯示內容不影響View的大小、位置,則只需調用invalidate方法;若View寬高、位置發生改變且顯示內容不變,只需調用requestLayout方法;若兩者均發生改變,則需調用兩者,按照View的繪制流程,推薦先調用requestLayout方法再調用invalidate方法。

    ?

    相關知識點:

    1.invalidate和postInvalidate:invalidate方法只能用于UI線程中,在非UI線程中,可直接使用postInvalidate方法,這樣就省去使用handler的煩惱。

    ?

    轉載于:https://www.cnblogs.com/kebibuluan/p/7205704.html

    總結

    以上是生活随笔為你收集整理的android面试详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。