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調起,一定要配置下面這句

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

element-ui Notification重疊問題,原因及解決辦法

在1個方法中調用兩次this.$notify方法&#xff0c;會出現通知框重疊的問題 methods: {checkLogin: function () {if (this.username ) {this.$notify({title: 提示,message: 請輸入用戶名})}if (this.password ) {this.$notify({title: 提示,message: 請輸入用戶密碼})}}}網上…

Visual Stiudio使用技巧

技巧1 自動生成帶參構造函數當我們在編寫代碼時會經常遇到初始化一個的類&#xff0c;需要通過構造函數進行對象初始化。那么這個時候我們可能會需要逐個去手動寫&#xff0c;這樣的工作即重復又無趣。如果是在項目非常緊急的情況下還有大量的字段需要與入參一一對應起來簡直太…

js將時間戳格式化為HH:ii:ss的格式

將時間戳格式化為 HH:ii:ss的格式 <html> <head> </head> <body><span id"time"></span><script>var timestamp Date.parse(new Date())/1000;var time_old Date.parse(new Date())/1000;timeAdd()/*** purpose : …

Struts 整合 SpringMVC

Struts 整合 SpringMVC 過程&#xff1a;這篇文章是我在整合過程中所做的記錄和筆記 web.xml &#xff1a;篩選器機制過濾 原機制是攔截了所有 url &#xff0c;即 <url-pattern>/*</url-pattern>新機制為了將 structs2 的 url 與 SpringMVC 的 url 區分開來&#…

Vue保持用戶登錄及權限控制

vue-router-power-demo 核心內容有兩點&#xff1a; 一是保持用戶登錄狀態&#xff0c;二是根據登錄用戶的角色動態掛在路由 使用vuex保持用戶登錄 點擊登錄按鈕&#xff0c;使用vuex的actions分發登錄操作&#xff0c;發送用戶名和密碼到后臺獲取登錄token&#xff0c; 并存…

java B2B2C Springcloud多租戶電子商城系統-Spring Cloud Sleuth

在微服務框架中&#xff0c;一個由客戶端發起的請求在后端系統中會經過多個不同的的服務節點調用來協同產生最后的請求結果&#xff0c;每一個前段請求都會形成一條復雜的分布式服務調用鏈路&#xff0c;鏈路中的任何一環出現高延時或錯誤都會引起整個請求最后的失敗。 愿意了解…

C#性能測試BenchmarkDotnet

1.簡介在我們開發高性能代碼時&#xff0c;需要各種針對性能優化進行編碼。那么如何才能知道我們所加的代碼是否有性能方面的正向優化呢&#xff1f;有了BenchmarkDotNet&#xff0c;做性能對比測試就非常容易了&#xff0c;只需要把你的測試方法加上特性[Benchmark], 想做不同…

Requests獲取連接的IP地址

在接口自動化的時候&#xff0c;需要獲取到連接的本地IP地址&#xff0c;方法如下 1 import requests 2 3 rsp requests.get("http://www.baidu.com", streamTrue) 4 print rsp.raw._connection.sock.getpeername()[0] 5 print rsp.raw._connection.sock.getsockna…

阿里云APP(V4.3) SSH遠程登錄功能設置操作指南

阿里云APP V4.3 發布了&#xff0c;這次的升級&#xff0c;不僅在iOS和android平臺上支持SSH遠程登錄ECS功能&#xff0c;也支持密鑰登錄哦~~~ SSH遠程登錄&#xff0c;這是一個連阿里巴巴自己的技術人員都開心不已的功能&#xff01; 各位攻城獅們&#xff0c;從更新到V4.3的那…

JS專題之節流函數

本文共 2000 字&#xff0c;讀完只需 8 分鐘上一篇文章講了去抖函數&#xff0c;然后這一篇講同樣為了優化性能&#xff0c;降低事件處理頻率的節流函數。 一、什么是節流&#xff1f; 節流函數&#xff08;throttle&#xff09;就是讓事件處理函數&#xff08;handler&#xf…

vue 2.6 插槽v-slot用法記錄

v-slot用法簡記用法示例匿名插槽與具名插槽插槽作用域組件使用插槽動態命名總結用法示例 vue2.6統一了插槽的語法v-slot 匿名插槽與具名插槽 在其他組件中使用child組件 <child><template v-slot:slotName>hello world</template> </child>child組…

Latex排版全解(轉)

Latex排版全解 http://blog.csdn.net/langb2014/article/details/51354238轉載于:https://www.cnblogs.com/yifdu25/p/8338399.html

git-ftp Can't access remote 'ft://...', exiting...問題記錄

環境 服務器&#xff1a;西部數碼虛擬主機 本地系統&#xff1a;windows 10 (LTSC 2019) 軟件&#xff1a; Git Bash&#xff0c;gti-ftp (版本1.6.0) 問題 在使用git ftp init初始化上傳代碼的時候會出現 $ git ftp init fatal: Cant access remote ftp://dmkt:***dmkt.goto…

【Flutter教程】從零構建電商應用(一)

在這個系列中&#xff0c;我們將學習如何使用google的移動開發框架flutter創建一個電商應用。本文是flutter框架系列教程的第一部分&#xff0c;將學習如何安裝Flutter開發環境并創建第一個Flutter應用&#xff0c;并學習Flutter應用開發中的核心概念&#xff0c;例如widget、狀…

為OWA自定義快捷鍵

這篇短文分享一下如何為自己常用的網頁添加自定義功能&#xff0c;例如添加快捷鍵。我這里用一個常用的網站作為范例。它是Outlook Web Access (OWA), 它的地址一般如下。我在寫郵件時希望能用一些快捷鍵來提高工作效率&#xff0c;但系統默認自帶的快捷鍵特別少&#xff0c;而…

數據結構 快速排序

快速排序是對冒泡排序的一種改進&#xff0c;是所有內部排序算法中平均性能最優的排序算法。其基本思想是基于分治法的&#xff1a;在待排序數組L[1...n]中任取一個元素pivot作為基準&#xff0c;從數組的兩端開始掃描。設兩個指示標志&#xff08;low指向起始位置&#xff0c;…

Finally語句塊的運行

一、finally語句塊是否一定運行&#xff1f; Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被運行&#xff1f;非常多人都說不是。當然他們的回答是正確的&#xff0c;經過試驗。至少下面有兩種情況下finally語句是不會被運行的&#xff1a; &#xf…

vue-cli 3.0 跨域請求代理

官方文檔中指明&#xff0c;跨域請求可以通過配置vue.config.js中的devServer.proxy選項來進行配置。 這個選項配置的本質實際上就是http-proxy-middleware中間件的用法&#xff0c;和Webpack-dev-server的proxy一樣。 vue-cli 3.0中介紹了兩種常見的用法&#xff1a; modul…

小米人員架構調整:組建中國區,王川任總裁

12月13日上午&#xff0c;小米內部發布人員調整公開信&#xff0c;信中傳達了兩個重要內容&#xff1a;將銷售與服務部改組為中國區&#xff0c;任命集團高級副總裁王川兼任中國區總裁。 在今年9月份&#xff0c;也就是小米上市前夕&#xff0c;雷軍在一封內部信中宣布對公司組…

在 .NET 7上使用 WASM 和 WASI

WebAssembly&#xff08;WASM&#xff09;和WebAssembly System Interface&#xff08;WASI&#xff09;為開發人員開辟了新的世界。.NET 開發人員在 Blazor WebAssembly 發布時熟悉了 WASM。Blazor WebAssembly 在瀏覽器中基于 WebAssembly 的 .NET 運行時上運行客戶端。WASI通…