1. 程式人生 > >你所不知道的Activity方法

你所不知道的Activity方法

Android重要類學習之——Activity

NOTE:大家可以到這裡http://www.docin.com/p1-240628976.html下載word版的
這是Android中的最基本的元件,也是我們最常用的元件,一般情況下,一個Activity就代表一個螢幕或者說是視窗,它包含一個或多個檢視(View),我們能夠與之進行互動。
Android系統中的Acitivity通過Acitivity Stack進行管理。當一個新的Activity被啟動的時候 ,它就會被放置在棧頂併成為執行的Activity。一個Activity有四個狀態:

(1)、Active or Running——Activity位於棧頂

(2)、Paused——這種狀態下,Acitivty失去焦點,但仍然可見(可能是一個非全屏的Activity或者透明的Activity被置於這個Activity之上)。
(3)、Stopped——這種狀態下的Activity就得完全不可見。
(4)、Inactive——當一個曾經被啟動過的Activity被殺死時,它就變成inactive。Inactive Activity會從Activity棧中移除,當它重新顯示和使用時需要再次啟動。
如果裝置的配置(Configuration)改變了,系統 會把當前 的Activity銷燬(destroy),然後再建立它的一個新例項。
這篇文章裡,我主要 是對Activity中一些有用的方法進行摘錄,至於那些最常用 的比如說onCreate之類 的生命週期方法這裡就略去不提了。


public Intent getIntent() ——獲取啟動這個Activity的Intent

public void setIntent(Intent newIntent) ——執行這個方法後,再呼叫getIntent()將返回newIntent

public final Application getApplication() ——獲取此Activity所屬的Application

public WindowManager getWindowManager() ——

public Window getWindow()

public View getCurrentFocus() ——當前取得焦點的View


protected void onNewIntent(Intent intent)——如果該Acitivity的launchMode設定成了singleTop或者其他的元件通過intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)這樣的intent來啟動該Activity的時候,如果此Activity的例項已經存在了,那麼不會再建立新的例項,而是把已經存在的該Activity的例項放到activity stack的棧頂。。此時這個方法會被呼叫(在onResume之前呼叫)。在這個方法的重寫版本中,我們應該呼叫setIntent()方法來更新以使通過getIntent()獲取到的是最新的啟動這個Activity的Intent。
protected void onSaveInstanceState(Bundle outState) ——如果這個Activity不是在running狀態,某個時刻可能因為記憶體原因系統會將其回收掉,再將來某個時刻再回到這個Activity的時候系統會嘗試重新建立一個新例項。我們可能希望這個Activity在被 回收前我們可以做一些當前使用者介面的儲存或其他狀態的儲存,這時我們就應該重寫這個方法,因為這個方法會在onStop之前被呼叫,我們可以通過其引數outState來儲存狀態,在onCreate(onSavedInstanceState)方法中從onSavedInstanceState中獲取我們之前儲存的狀態值來恢復這個Activity被kill之前 的狀態。

protected void onUserLeaveHint()——當一個Activity將要進入後臺(background)時被回撥。

public void onConfigurationChanged(Configuration newConfig)——請檢視API文件

public void onLowMemory() ——當整個系統執行一個低記憶體狀態時,這個方法會被呼叫 。我們可以重寫這個方法來清除一些快取或者其它的不必要的資源。當這個方法返回的時候 ,系統會進行一次垃圾回收


public final Cursor managedQuery(Uri uri,
String[] projection,
String selection,
String[] selectionArgs,
String sortOrder)
{
Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
if (c != null) {
startManagingCursor(c);
}
return c;
}——從這個方法的實現中我們可以看出它除了獲取一個ContentResolver例項來實現查詢外,該Activity還會根據它的生命週期對返回的Cursor物件的生命週期進行管理。舉個例子說,當此Activity重新啟動的時候,會呼叫Cursor物件的requery方法以相同的引數來重新進行查詢。

public final void setDefaultKeyMode(int mode)——用來設定Activity的預設按鍵模式,也就是說當Activity中發生了一些按鍵事件,但是沒有任何Listener來響應的時候就執行這裡mode設定的動作,mode的值可以是以下5個之一:DEFAULT_KEYS_DISABLE,DEFAULT_KEYS_DIALER,DEFAULT_KEYS_SHORTCUT,
DEFAULT_KEYS_SEARCH_LOCAL,DEFAULT_KEYS_SEARCH_GLOBAL

public void onBackPressed() {
finish();
}——按back鍵時會被呼叫 ,預設情況下是結束當前Activity的生命,但是我們可以重寫這個方法來實現我們想要的操作。

public boolean onTouchEvent(MotionEvent event) {
return false;
}——用來處理螢幕觸控事件,如果被觸控到的View沒有處理這個事件的話,這個方法會被呼叫(當然了它必須得返回true了)。提到這個方法,我們有必要再說下這個方法:
public boolean onTouch(View v, MotionEvent event),這個方法是定義在View.OnTouchListener這個介面中的,一般我們可以通過view.setOnTouchListener()來設定這個此監聽器。我們可以看到這個方法的引數表中還有一個View型別的引數,這個是用來獲取觸控事件的發生源的。還有,如果一個觸控事件發生在了同一個View上,而這個View設定了OnTouchListener,那麼 只有onTouch()方法返回false的時候 onTouchEvent()才會被呼叫。

public boolean onTrackballEvent(MotionEvent event) {
return false;
}

public void addContentView(View view, ViewGroup.LayoutParams params)——看名字,原來通過serContentView(View)設定的view不會被移除。

public void onContentChanged() ——當呼叫setContnetView或addContentView時這個方法會被呼叫。


public boolean onCreateOptionsMenu(Menu menu) ——我們會重寫這個方法來建立選項選單,這個方法只會被系統呼叫一次(選單第一次顯示時)。

public boolean onPrepareOptionsMenu(Menu menu)+——每次選單顯示前都會呼叫這個方法,因此如果我們想在選單顯示前根據某些條件更新選單內容,可以重寫這個方法。

public void onOptionsMenuClosed(Menu menu) ——看名字哈。。

public void openOptionsMenu()
public void closeOptionsMenu() 通過程式的方法開啟/關閉選單

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)——建立上下文選單,每次上下文選單將要顯示的時候都會呼叫這個方法。

public void registerForContextMenu(View view) ——為某個View註冊上下文選單。

public void unregisterForContextMenu(View view) ——阻止在view上顯示上下文選單

public void openContextMenu(View view)
public void closeContextMenu() 通過程式呼叫的方式來開啟或者關閉上下文選單

public boolean onSearchRequested() {
startSearch(null, false, null, false);
return true;
}——響應搜尋請求訊號

public void startSearch(String initialQuery, boolean selectInitialQuery,
Bundle appSearchData, boolean globalSearch) ——用來啟動搜尋的UI介面,經常在onSearchRequest()方法中呼叫

public void takeKeyEvents(boolean get)——即使在Activity中沒有取得 焦點的View,也會處理此按鍵事件。

public final boolean requestWindowFeature(int featureId) {
return getWindow().requestFeature(featureId);
}——常用的featureId有:FEATURE_NO_TITLE,FEATURE_PROGRESS,FEATURE_LEFT_ICON,
FEATURE_INDETERMINATE_PROGRESS,這些靜態常量都定義在Window類中

public final void setFeatureDrawableResource(int featureId, int resId)————featureId定義在Window類中,resId是我們放在res目錄下的圖片資源ID。這個方法必須在requestWindowFeature呼叫之後才能使用。 。
public final void setFeatureDrawableUri(int featureId, Uri uri)——同上

public LayoutInflater getLayoutInflater()
public MenuInflater getMenuInflater()——這兩個方法也很有用,我們可以通過它們獲取Inflater然後來解析佈局檔案來返回View或產生menu

public void startActivityForResult(Intent intent, int requestCode)——對於這個方法有幾點 要注意:如果requestCode的值小於0,這個方法的作用就和startActivity一樣了,也就是說不會返回值。如果你要啟動的Activity和此Activity不在一個task中,那麼會馬上收到一個RESULT_CANCELED的responseCode。

public void startActivity(Intent intent) {
startActivityForResult(intent, -1);
}——最常用的方法之一及其實現 。。

public boolean startNextMatchingActivity(Intent intent)——這個方法一般這樣用。。onCreate(){
...
boolean has =startNextMatchingActivity(getIntent());
if(has){
finish();
}
...
}

public String getCallingPackage()
public ComponentName getCallingActivity()

public void finishActivity(int requestCode)——關閉之前通過 startActivityForResul(intent,requestCode)呼叫的Activity(們)。。

public void setRequestedOrientation(int requestedOrientation)——改就能當前Activity的螢幕朝向,requestedOrientation是定義在ActivityInfo中的靜態常量。

public int getTaskId() ——此Activity所在的Task的ID。這裡給出Task的官方定義 :A task is a collection of activities that users interact with when performing a certain job. The activities are arranged in a stack (the "back stack"), in the order in which each activity is opened.

public boolean isTaskRoot() ——如果此Activity是所在Task中的第一個Activity返回true.

public boolean moveTaskToBack(boolean nonRoot)——把這個Activity所在的Task移到後臺(background,此時將回到Home或者之前的Task)。nonRoot為false時,只有isTaskRoot()返回true時這個方法才會起作用。

public String getLocalClassName()——獲得這個類的名字,不帶限定名
public ComponentName getComponentName()

public SharedPreferences getPreferences(int mode)——獲得的SharedPerference只屬於這個Activity。

public void setTitle(CharSequence title)
public void setTitle(int titleId)
public void setTitleColor(int textColor)——對標題欄的一些設定,也有對應的getter方法

public final void setProgressBarVisibility(boolean visible)——設定標題欄中ProgressBar的可見性。
public final void setProgressBarIndeterminateVisibility(boolean visible)
public final void setProgressBarIndeterminate(boolean indeterminate)——設定為進度不確定的.
public final void setProgress(int progress)——progress的取值範圍為0~10000
public final void setSecondaryProgress(int secondaryProgress)

public final void setVolumeControlStream(int streamType)——streamType可取值是定義在AudioManager靜態常量,例如STREAM_MUSIC, STREAM_NOTIFICATION, STREAM_VOICE_CALL等。這個方法就是用來設定聲音控制按鈕控制的聲音的型別的。這個方法有相應的getter。

public final void runOnUiThread(Runnable action)——action這個任務將在UI執行緒中執行

原文:https://www.douban.com/note/174563311/