1. 程式人生 > >在當前activity中呼叫另一個activity中的方法怎麼處理?

在當前activity中呼叫另一個activity中的方法怎麼處理?

        在使用介面回撥方法時,要注意,class 和activity 還是有差異的,兩個activity之間不建議使用介面interface 。

eg:在A-activity 中呼叫 B-activity中的方法時,總會報介面物件是空的,進而介面的方法沒有辦法進行呼叫,而在activity和class之間,呼叫interface就不會出現上述問題 , 又一次遇到這個問題並碰到一篇

在一個Activity中呼叫另外一個Activity的變數或方法

所以特此記錄這個問題

想在一個Activity裡面呼叫另外一個Activity的方法主要有介面回撥靜態方法。但是除了靜態方法之外,並不推薦介面回撥方法。

其中靜態方法實現參考如下表述:

    需求:在A activity中呼叫 B activity的methodB()。

    實現:使用靜態實現。

    在B方法中定義:

public static void methodB(){}

    在A中需要使用methodB()的地方這樣呼叫:

    B.methodB();

為何不推薦在一個Activity中呼叫另一個Activity呢。因為Android系統執行記憶體較小,故其系統會在需要的時候將後臺的程序自動清理掉以為當前程序提供執行記憶體。而android移動裝置除了當前正在顯示的activity意外,其他的activity都在後臺執行。例如你在A activity中呼叫B activity 的方法時候,有可能B activity已經被銷燬,所以,只能使用B activity的靜態方法。

最後的做法是將Activity介面顯示和邏輯分開寫在不同的類中,這樣才複合程式開發的MVC框架還有Java程式設計的面向物件思想。


如果想要在兩個activity中呼叫方法的話,

宣告一個類AFactory,裡面有靜態變數public static Activity A;在A中呼叫 AFactory.A = this;

這樣在b中就可以直接呼叫AFactory.A.function();就行了

另外不想使用 static的話(畢竟記憶體有限,全域性處理的話不太好),可以嘗試改變activity的啟動模式 ,

standard、singleTop、singleTask、singleInstance

標準模式:每次啟動一個Activity都會重寫建立一個新的例項

棧頂複用模式:

  1. 當前棧中已有該Activity的例項並且該例項位於棧頂時,不會新建例項,而是複用棧頂的例項,並且會將Intent物件傳入,回撥onNewIntent方法
  2. 當前棧中已有該Activity的例項但是該例項不在棧頂時,其行為和standard啟動模式一樣,依然會建立一個新的例項
  3. 當前棧中不存在該Activity的例項時,其行為同standard啟動模式

棧內複用模式:

     1. 如果不存在,則會建立一個新的Task,並建立新的Activity例項入棧到新建立的Task中去       

     2. 如果存在,則得到該任務棧,查詢該任務棧中是否存在該Activity例項 

                如果存在例項,則將它上面的Activity例項都出棧,然後回撥啟動的Activity例項的onNewIntent方法 

                如果不存在該例項,則新建Activity,併入棧 

全域性唯一模式:

       該模式具備singleTask模式的所有特性外,與它的區別就是,這種模式下的Activity會單獨佔用一個Task棧,

具有全域性唯一性,全域性整個系統,即整個系統中就這麼一個例項,由於棧內複用的特性,後續的請求均不會建立新的Activity例項,除非這個特殊的任務棧被銷燬了。

參考文章 :

  http://blog.csdn.net/phenixyf/article/details/52050302(兩個activity呼叫問題分析)

  http://www.oschina.net/question/912920_83748(兩個activity之間怎麼呼叫方法)

  http://blog.csdn.net/mynameishuangshuai/article/details/51491074(activity的四大啟動模式)