new關鍵字和newInstance()方法的區別
a. new可以調用帶參數的構造函數,newInstance不可以
b. newInstance: 弱類型。低效率。隻能調用無參構造。
new: 強類型。相對高效。能調用任何public構造。
c. new是自己下廚,做飯自己吃。newInstance是外面吃別人做給你吃。
自己做可以保證安全,而且可以有多個口味,什麼醬,放多少自己定。new對象不會因為找不到類而出異常,而且你還可以調用多個構造函數,按照自己口味去new對象,去做一份符合自己口味的。
在外面吃,可能會你點的菜那個店裡沒有,或者是口味不對,你要吃番茄醬,但是人傢隻有花生醬。而且菜沒洗幹凈你也不知道。newInstance也是如此,很可能你要的對象他不存在,或者是參數不對。
對象的串行化(Serialization)
什麼是串行化:
把對象的這種能記錄自己的狀態以便將來再生的能力,叫做對象的持續性(persistence)。
對象通過寫出描述自己狀態的數值來記錄自己,這個過程叫對象的串行化(Serialization)。
串行化的任務:寫出對象實例變量的數值。
https://www.cnblogs.com/vicenteforever/articles/1471775.html
SoapObject.getProperty的作用:
// 生成調用Webservice方法的SOAP請求信息.該信息由SoapSerializationEnvelope對象描述 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet = true; envelope.setOutputSoapObject(rpc); ht.call(NAMESPACE + methodName, envelope); if (envelope.bodyIn.toString().startsWith("SoapFault")) { SoapFault sf = (SoapFault) (envelope.bodyIn); Log.i("fault", sf.faultstring); if (handler != null) { Message message = Message.obtain(handler); message.what = 3; message.obj = sf.faultstring; message.sendToTarget(); } return; } SoapObject result = (SoapObject)envelope.bodyIn; String str = result.getProperty("abc").toString();//從result裡面找到名為"abc"的值 如:result的值為:getInfoResponse{abc=測試; } 那麼,result.getProperty("abc")將會從result裡面找到abc的值“測試”
Android 的Message機制:
Message機制涉及三個主要的類:Handler、 Message、 Looper
1. Handler 兩個用途:定時處理或者分發消息;添加一個執行的行為在其他線程中執行。
Handler中常見的方法就是對消息的處理,可以覆蓋public void handleMessage(Message msg) 方法,
2. 消息android.os.Message
定義一個Message包含必要的描述和屬性數據,此對象可以被發送給android.os.Handler處理。
字段:what保存消息標示;obj是Object類型對象;replyTo是消息管理器,會關聯到一個handler,handler就是處理其中的消息。通常Message對象不是new出來的,而是調用handler中的obtainMessage方法來直接獲得Message對象
如:
Message message = Message.obtain(handler);
3. Looper類主要用於一個線程循環獲取消息隊列中的消息:管理消息隊列,負責消息的出列和入列操作。
Message機制原理示意圖:
Activity EHandler Looper MessageQueue
IntentReceiver EHandler Looper MessageQueue
具體詳細傳遞步驟等可以參考 https://blog.csdn.net/dadoneo/article/details/7667726 文章
WeakReference
WeakReference與SoftReference都可以用來保存對象的實例引用,與垃圾回收有關。
WeakReference是弱引用,保存的對象實例可被GC回收,常用於 在某處保存對象引用,而又不幹擾該對象被GC回收 如Debug,內存監視工具等程序中。該類程序一般要求既要觀察到對象,又不能影響該對象正常的GC過程。
SoftReference是強引用,保存對象實例,除非JVM即將OutOfMemory,否則不會被GC回收。特別適用於設計對象Cache。對於Cache,我們希望被緩存的對象最好始終常駐內存,但是如果JVM內存吃緊,為瞭不發生OutOfMemoryError導致系統崩潰,必要的時候也允許JVM回收Cache的內存。待合適的時機再把數據重新Load到Cache中。使得設計更具有彈性。
Dialog點擊按鈕時對話框不會被關閉的實現:
public void closeDialog(final DialogInterface dialog, boolean close) { // 利用反射使點擊按鈕時,對話框不會關閉 try { // 得到AlertDialog的父類屬性mShowing field = dialog.getClass().getSuperclass() .getDeclaredField("mShowing"); field.setAccessible(true); // 將mShowing變量設為false,表示對話框已關閉 field.set(dialog, close); dialog.dismiss(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
詳細的反射可以參照這篇文章
android 反射機制的原理與實現 https://blog.csdn.net/annaleeya/article/details/8240510
Mr.傅:學習筆記
歡迎轉載,轉載註明出處,謝謝