android對象
㈠ Android SharedPreferences對象的獲取
Android中主要提供了三種方法用於獲取SharedPreferences對象
getSharedPreferences()方法接收兩個參數,第一個參數為創建的文件名稱SharedPreferences文件存放在/data/棚凳data/<packagename>/share_preds目錄下。第二個參數為指定的操作模式,目前只能選擇MODE_PRIVATE這一種模式,MODE_PRIVATE為默認模式,和直接傳入0的效果是相同的,表示只有當前的應用程序才能對這個SharedPreferences文件進行讀寫(可參考Context的枚舉屬性)。
該方法和Context類中的getSharedPreferences()方鋒帆法相似,不過它只接收操作模式一個參數,因為使用該方法時系統會自動把當前活動的類名作為SharedPreferences的文件名。
getDefaultSharePreferences()方法為靜鏈基旅態方法,它接收一個Context參數,並自動使用當前應用程序包名作為前綴來命名SharedPreferences文件。
㈡ 23、Android設計模式---(對象共享、避免創建多對象)享元模式
又稱 FlyWeight,代表輕量級的意思,結構型設計模式。
享元模式是對象池的一種實現。類似於線程池,線程池可以避免不停的創建和銷毀多個對象,消耗睜如性能。享元模式也是為了減少內存的使用,避免出現大量重復的創建銷毀對象的場景。
享元模式用在一批相同或相似的對象上,這些對象有可以共享的內部狀態和各自不同的外部狀態。
享元模式仔辯中會有一個工廠,工廠維護著一個容器,容器以鍵值對的方式存儲,鍵是對象的內部狀態,也就是共享的部分,值就是對象本身。客戶端從這個工廠獲取對象,如果容器中存在這個對象就直接返回,不存在再創建新的對象並存入容器,避免了大量重復創建對象。
使用共享對象有效的支持大量的細粒度對象的復用。
系統中存在大量的 相似對象。
細粒度的對象都具備較接近的外部狀態,且內部狀態與環境無關,即對象沒有特定身份。
需要 緩沖池 的場景。
例1. 過年回家買火車票,無數人在客戶端上訂票 (有多次購票、刷票的情況),即不斷向服務念早缺端發送請求。
而每次查詢,伺服器必須做出回應,具體地,用戶查詢輸入出發地和目的地,查詢結構返回值只有一趟列車的車票。而數以萬計的人有同樣需求,即不間斷請求數據,每次重新創建一個查詢的車票結果,即造成大量重復對象創建、銷毀,使得伺服器壓力加重。
享元模式正好適合解決該情形的問題,例如 A 到 B 地的車輛是有限的,車上鋪位分硬卧、軟卧和坐票三種,將這些可公用的對象緩存起來。用戶查詢時優先使用緩存,反之則重新創建。
我們知道 java 中 String 是存在於常量池中,即一個 String 被定義之後它就被緩存到了常量池中,當其他地方使用同樣的字元串,則直接使用緩存,而非創建。
享元模式的優缺點
優點 - 大幅度地降低內存中對象的數量。
缺點-1) 為了使對象可共享,需將一些狀態外部化,使程序的邏輯復雜化
㈢ 在android系統中,那些被監聽對象有哪些
在android系統中,那些被監聽對象有哪些:1、單擊事件(View.OnClickListener):當用戶觸碰到某個組件或者方向鍵被按下時產生該事件,該事件的處理方法是onClick()。
2、焦點事件(View.OnFocusChangeListener):組件得到或者失去焦點時產生該事件,事件處理方法是onFocusChange()。
3、按鍵事件(View.OnKey Listener):用戶按下或者釋放設備上的某個按鍵時產生,事件處理方法是 onKey()。
4、觸碰事件(View.OnTouchListener):設備具有觸摸屏功能時,觸碰屏幕產生該事件。事件處理方法是onTouch()。
5、創建上下文菜單事件(View.OnCreateContextMenu Listener):創建上下文菜單時產生該事件,事件處理方法是 onCreateContextMenu()。
㈣ 自己關於Android上下文對象的理解
Android中有個我們熟悉又陌生的對象Context(上下文),當我們啟動Activity的時候需要上下文,當我們使用dialog的時候我們需要上下文,但是上下文對象到底是個什麼東西呢?
在Android api當中是這樣描述context對象的。
"Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc."
「是一個用於實現關於應用環境的整體信息的一個介面。這是一個由安卓系統提供的抽象類並且系統有對他進行實現。它允許訪問到應用特殊的資源和類,同時它也可以實現到應用級別的操作,例如:Activity的啟動,廣播的實現和接受intent等。」
一、Context的主要實現和繼續理解
知道了context的大概描述,我們可以再繼續理解Context這個神秘的對象了,首先,作為基類,肯定有其它類去實現它,主要實現了context類的類是Activity,Service,Application。他們三個類雖然都是Context的子類,但是具體的繼承關系卻有些不大一樣:
Activity的繼承關系:
Service和Application的繼承關系:
可以看出我們的Context其實就是我們熟知的Activity,Service,Application。
在這3個類中,Activity的context對象和Application的context對象最容易弄混淆。
二、Context中的主要方法
知道了Context的大概描述和他的一些繼承關系,我們對Context這個類有了一個大致的了解。現在可以看看在context中的一些方法,來加深對context的一個理解,有很多我們使用過的方法其實都是從Context這個類中實現而來。
我們從Android api中查看Context類,這里出現了一個非常熟悉的方法:startActivity,可以看到其實Activity中的StartActivity方法是重寫了Context中的方法。
abstract void startActivity ( Intent intent)
Same as startActivity(Intent, Bundle) with no options specified.
abstract void startActivity ( Intent intent, Bundle options)
Launch a new activity.
同時context還可以訪問到資源文件,獲得資源文件中的信息。
abstract Resources getResources ()
Return a Resources instance for your application's package.
abstract SharedPreferences getSharedPreferences ( String name, int mode)
Retrieve and hold the contents of the preferences file 'name', returning a SharedPreferences through which you can retrieve and modify its values.
final String getString (int resId)
Return a localized string from the application's package's default string table.
final String getString (int resId, Object... formatArgs)
Return a localized formatted string from the application's package's default string table, substituting the format arguments as defined in Formatter and format(String, Object...) .
同時context不但可以開啟一個activity,同時還可以開啟或者關閉一個Service。
abstract ComponentName startService ( Intent service)
Request that a given application service be started.
abstract boolean stopService ( Intent service)
Request that a given application service be stopped.
訪問Android Api 或者查看源碼可以看到,Context中還有很多訪問資源文件和程序之間互相通信的方法。
可以看出context其實就是一個應用之中的手腳,可以通過他來拿取資源文件中的資源,還可以通過他來處理Activity和Service中的一些操作,這個類就是整個程序的樞紐,負責管理整個程序的通暢運行。
我們可以通過分析一個Toast通知的源碼去分析context的去向和使用,來了解context到底做了些神馬操作:
public static Toast makeText(Context context, CharSequence text, int ration) {
Toast result = new Toast(context);
LayoutInflater inflate = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
tv.setText(text);
result.mNextView = v;
result.mDuration = ration;
return result;
}
可以看到makeText方法接受的context被用於
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
這是用於獲取XML中定義的View的方法,可以看到通過外部傳入的Context,在這里獲得了一個View布局用於顯示Toast。
public Toast(Context context) {
mContext = context;
mTN = new TN();
mTN.mY = context.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.toast_y_offset);
mTN.mGravity = context.getResources().getInteger(
com.android.internal.R.integer.config_toastDefaultGravity);
}
這一行中可以看出在context又被用來獲取資源文件,可以看出Toast的顯示和布局都是通過context去調用系統寫好的資源文件來進行實現的。
三、Activity context和Application context的區別
Activity的context和Application的context的區別在於生命周期的區別,Activity的context是依附在著Activity的生命周期的,而Application的Context的生命周期是依附在整個應用之上的。
㈤ android 上下文對象對象是什麼意思
你說的是Context吧,它代表的是某個類的團辯引用,比如
public class B{
private Context mContext;
public B(Context context){
mContext = context;
.......................
}
}
如果在class A中新建了塌臘缺一個class B的對局豎象,B b = new B(A.this);那麼B的構造方法中的context參數就是A的引用,在android中如果A是Activity那麼B中的mContext經過賦值後就可以像使用Activity一樣使用mContext,比如mContext.startActivity(..........);
((Activity)mContext).finish();等等
㈥ 在android 中 什麼對象主要用於發送消息和處理消息
Android消息機制中,Handler對象主要用於發送消息,不能夠處理消息.
㈦ android怎麼創建url對象
在 Android 應用程序中,要創建 URL 對象可以使用 java.net.URL 類。
以下是創建 URL 對象的基本語法:
URL url = new URL("http://www.example.com");
上述代碼可以將字元串 URL 轉換為 URL 對象。可以在括弧內提供 URL 字元串。
可蘆模以在字元串中包括協議類型(http://或 https:/型孫/)、主機名(例如www.example.com)、埠號或路徑等等。例如:
URL url = new URL("https://www.example.com:443/login");
上述代碼會在創建 URL 對象時指定協議類型為 HTTPS,主機名為www.example.com,埠號為443,路徑為login。
如果 URL 字元串不是有效的 URL,則會拋出MalformedURLException 異常。可以使用 try-catch 塊捕獲異常,例如:
try {
URL url = new URL("http://invalid_URL");
} catch (MalformedURLException e) {
e.printStackTrace();
}
此外,還陪租緩可以使用其他構造函數和方法生成更復雜的 URL 對象,例如添加請求參數等等。需要根據具體情況進行調整。
希望這些信息對您有所幫助!
㈧ Android Intent傳遞對象為什麼要序列化,序列化有那幾種方式
我們都知道進行android 開發的時候,跳轉到Activity和Fragment的時候,傳遞對象是通過Intent或者bundle 進行傳遞。當這個對象沒有實現序列化的時候 當你通過Inetnt傳遞的時候會報紅,系統會提示你將這個對象實現序列化。
1.先了解一下 什麼是序列化。通過對《Android 開發藝術探索》可以知道序列化是將一個對象轉化成可存儲可傳輸的狀態,序列化後的對象可以在網路上傳輸,也可以存儲到本地。
2.回到我們的主題,那為什麼要序列化呢?<大致有三個原因>
a.永久性保存對象,保存對象的位元組序列到本地文件中
b.對象可以在網路中傳輸
c.對象可以在IPC之間傳遞
3.序列化有那幾種方式呢<有兩種方式>
android自定義對象可序列化有兩個選擇一個是Serializable和Parcelable
4.它們之間有什麼區別?
a.在使用內存的時候Parcelable比Serializable的性能高。
b.Serializable在序列化的時候會產生大量的臨時變數,從而引起頻繁的GC(內存回收)。
c.Parcelable不能使用在將對象存儲在磁碟上這種情況,因為在外界的變化下Parcelable不能很好的保證數據的持續性。
d.實現Serializable很簡單 因為Serializable是一個空介面 所以只要在在實體類中實現這個介面即可 Parcelable就稍微復雜了一點了
這里有實現Parcelable 這個介面的列子 blog.csdn.net/jaycee110905/article/details/21517853