安卓和 java 學習筆記

來源:互聯網
上載者:User

標籤:接受   多個   應用   技術   github   restart   可靠性   變數   單例模式   

1、存取權限為 private 的成員變數或方法,需要執行setAccessible() 方法,並將入口參數設定為 true; 否則不允許訪問。

 

2、為了保證線程的安全,可以使用同步塊 synchronized 關鍵字。還有一種是定義同步的方法,同步方法前面有 synchronized。

// 1
synchronized(Object){ ...//}// 2public synchronized void doit(){ // 將共用資源操作放置在這裡}

 

 3、關於 try catch finaly 的

先看下面這個程式:

protected boolean fina11(){        try{            Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();            return true;        }catch (Exception e){        }finally {            Toast.makeText(this, "finally", Toast.LENGTH_SHORT).show();        }        return false;    }

運行後執行的結果為 "You clicked Add", "finally" ,傳回值 是true;不是false; 如果把 return true 給注釋掉;那麼就會返回 false;

 

4、可在 widegt 中發送 intent 給服務端,服務端註冊接受即可,但是發送給activity 的話有點困難。

 

5、正常情況下requestWindowFeature(Window.FEATURE_NO_TITLE)是可以生效的,但是當Activity繼承子AppCompatActivity的時候,這個就失效了 

第一種解決辦法,添加紅色代碼,注意要放在最後:

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        if (getSupportActionBar() != null){            getSupportActionBar().hide();        }    }

第二種解決辦法,添加紅色代碼,注意代碼順序,放中間,其他位置都不可以:

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);    }

 

6、關於給 recycleView 添加 點擊事件的實現:

首先我們給其實現了 implements View.OnClickListener  ;然後重寫了 onClick 事件。 在 onclick中我們把 對 介面 OnItemClickListener 中的方法 onItemClick 進行了調用。從而實現了點擊 item 事件。具體代碼參見 https://github.com/huanshen/Learn-Android/tree/master/recycleTest。下載編譯運行即可。

其實簡單來說 只要實現 implements View.OnClickListener  ,點擊之後就會調用  onClick 方法,但是因為是全域相應的,而不是 一個 item, 所以我們就重新寫了一個介面,並定義了一個 onItemClick 方法。

 

7、String.valueOf 和 .toString 方法

首先我們看 String.valueOf 的源碼:

public static String valueOf(Object obj) {    return (obj == null) ? "null" : obj.toString();}

可以發現, String.valueOf 的實現其實也是調用了 .toString  的方法,只不過,它還對資料為空白的情況進行了處理。返回 “null”。

 

8、在實際應用情境中,假設A Activity位於棧頂,此時使用者操作,從A Activity跳轉到B Activity。那麼對AB來說,具體會回調哪些生命週期中的方法呢?回調方法的具體回調順序又是怎麼樣的呢?

開始時,A被執行個體化,執行的回調有A:onCreate -> A:onStart -> A:onResume。

當使用者點擊A中按鈕來到B時,假設B全部遮擋住了A,將依次執行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。

此時如果點擊Back鍵,將依次執行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。

至此,Activity棧中只有A。在Android中,有兩個按鍵在影響Activity生命週期這塊需要格外區分下,即Back鍵和Home鍵。我們先直接看下實驗結果:

此時如果按下Back鍵,系統返回到案頭,並依次執行A:onPause -> A:onStop -> A:onDestroy。

此時如果按下Home鍵(非長按),系統返回到案頭,並依次執行A:onPause -> A:onStop。由此可見,Back鍵和Home鍵主要區別在於是否會執行onDestroy。

此時如果長按Home鍵,不同手機可能彈出不同內容,Activity生命週期未發生變化(由小米2s測的,不知道其他手機是否會對Activity生命週期有影響)。

 

9、IPC 通訊方式的優缺點和適用情境

 

10、Android中的多進程模式

(1) 通過給四大組件指定 android:process 屬性就可以開啟多進程模式,預設進程的進程名是包名 packageName,進程名以 : 開頭的進程屬於當前應用的私人進程,其他應用的組件不可以和它跑在同一個進程中,而進程名不以:開頭的進程屬於全域進程,其他應用通過 ShareUID 方法可以和它跑在同一個進程中。

android:process=":xyz" //進程名是 packageName:xyzandroid:process="aaa.bbb.ccc" //進程名是 aaa.bbb.ccc

(2) Android系統會為每個應用程式指派一個唯一的 UID,具有相同 UID 的應用才能共用資料。兩個應用通過ShareUID跑在同一個進程中是有要求的,需要這兩個應用有相同的 ShareUID並且簽名相同才可以。 在這種情況下,它們可以相互訪問對方的私人資料,比如 data 目錄、組件資訊等,不管它們是否跑在同一個進程中。如果它們跑在同一個進程中,還可以共用記憶體資料,它們看起來就像是一個應用的兩個部分。 

(3) android 系統會為每個進程分配一個獨立的虛擬機器,不同的虛擬機器在記憶體配置上有不同的地址空間,所以不同的虛擬機器中訪問同一個類的對象會產生多個副本。

(4) 使用多線程容易造成以下幾個問題:

1. 靜態成員和單例模式完全失效;

2. 線程同步機制完全失效:無論鎖對象還是鎖全域對象都無法保證線程同步;

3.  SharedPreferences 的可靠性下降:SharedPreferences 不支援並發讀寫;

4. Application 會多次建立:當一個組件跑在一個新的進程的時候,系統要在建立新的進程的同時分配獨立的虛擬機器,應用會重新啟動一次,也就會建立新的 Application。運行在同一個進程中的組件是屬於同一個虛擬機器和同一個 Application。

同一個應用的不同組件,如果它們運行在不同進程中,那麼和它們分別屬於兩個應用沒有本質區別。

安卓和 java 學習筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.