ArrayList 和數組之間的一些轉換 Handler的主線程與子線程通訊 內部類的使用

來源:互聯網
上載者:User
1. ArrayList和數組之間的一些轉換

ArrayLlist底層就是用數組實現的,並且提供了兩個方法給我們來將集合轉換成數組

1. public Object[] toArray() 這個數組中儲存的是object對象

2. public T[] toArray(T[] a) 這個數組中儲存的是指定的T類型的對象

說說使用這兩個方法可能會出現的問題

使用第一個方法經常會出現類型轉換的問題

代碼:

ArrayList list = new ArrayList();

String[] whereArgs = (String[]) list.toArray();

就會拋出類轉換異常。這樣轉換時不對的,這裡涉及到了泛型的強轉問題,晚上看看再補充。

第二個方法:

代碼:

ArrayList list = new ArrayList();

String[] whereArgs = new String[list.size()];

whereArgs = list.toArray(whereArgs);

這樣寫是ok的,但是如果建立數組對象時,沒有指定數組的大小,就會報錯

這個方法中的參數a相當於c語言中的傳入性參數,將一個空數組傳給集合,集合將其填滿,再返回。

2. 使用Handler進行子線程與主線程之間的通訊

從一個錯誤開始:

public class HomeActivity extends Activity {
private static final String tag = "HomeActivity";
private Button mStart_btn;
private Thread mSubThread;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mStart_btn = (Button) this.findViewById(R.id.btn);
Log.i(tag, "mainThread: "+Thread.currentThread().getId());
mStart_btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
mSubThread = new Thread(new Runnable() {
@Override
public void run() {
Log.i(tag, "subThread: "+Thread.currentThread().getId());
Looper mainLooper = Looper.getMainLooper();
Handler subHandler = new Handler(mainLooper);
Message mes = subHandler.obtainMessage(1,1,1);

subHandler.sendMessage(mes);//向主線程發送資料

}
});
mSubThread.start();

}
});
}
private Handler mhandler = new Handler(){
@Override
public void handleMessage(Message msg) {
Log.i(tag, "handler01 is working");
mSubThread.stop();

}

};

結果:並沒有列印出“handler01 is working”,為什嗎?

在子線程中建立Handler對象,並且綁定主線程的Looper,按理說應該可以進行子線程與主線程之間的通訊了,但是為什麼會出現上述情況呢,這要從Handler的源碼說起

public final boolean sendMessage(Message msg)
{
return sendMessageDelayed(msg, 0);
}

public final boolean sendMessageDelayed(Message msg, long delayMillis)
{
if (delayMillis Clean... > Clean project selected below > Ok

4. 內部類的使用

4.1 什麼情況下使用內部類?

當你在類A中需要用到類B的對象,並且在類B中的方法裡還要訪問類A的成員變數和方法,這個時候,你就需要將類B寫成類A的內部類了。

4.2 外部如何引用內部類

1. 用關鍵字static修飾內部類,那麼這個內部類就相當於外部類,但是這種用法很少見,有很大的局限性,例如內部類不能訪問外部類中非static的成員

2. 通過建立對象從外部參考,先要建立外部類對象,然後通過外部類對象去new內部類的執行個體,實際上就是將內部類看成外部類的一個成員屬性而已。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.