比如如下代码当中包含了两个子线程,通过这次应该了解到的关于子线程的一些问题是:
1.子线程可以操作主线程当中拥有的数据,在不发生冲突的情况下主线程子线程之间的数据不需要传递
2.使用handler机制获取到子线程是否结束,并判断是否进行接下来的操作
3.不要把子线程单纯的当做一个简单的函数,除非是觉得很有必要才开一个子线程,毕竟线程之间是相互独立的,没那么容易就可以知道其什么时候结束,并且执行起来也没有先后顺序,所以,不要想着在一个for循环里面执行子线程,这样很容易就产生主线程执行完了子线程还没结束的状况,面对这样的问题,更多的应该是反过来考虑,不如在子线程里面执行你想要执行的循环?
4.子线程用得好能够缓解主线程的压力,提高程序流畅性,但是对于子线程的工作原理还需要深入的去了解才能应用自如
5.如下是一个使用线程的例子:
package com.example.tabexample;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.R.integer;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;
public class MyFriendsActivity extends Activity {
private static Context context;
private List<String> contactlists = new ArrayList<String>();
private List<String> list = new ArrayList<String>();
private int AmountOfContact = 0;
private final static int getData = 1;
private Bitmap bitmap;
private Boolean got_image = false;
Handler layoutHandler;
private List<Contact> contactList = new ArrayList<Contact>();
Handler handler = new Handler(){
public void handleMessage(Message msg){
Log.e("FFF", msg.what+"");
switch (msg.what){
case getData:
initContacts();
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_friends);
context = MyFriendsActivity.this;
//List<String> list = new ArrayList<String>();
getContacts();
}
private void initContacts(){
Log.e("list.size()", list.size()+"");
getHead();
layoutHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case getData:
setLayout();
break;
default:
break;
}
};
};
}
private void setLayout(){
final ContactAdapter adapter = new ContactAdapter(context,
R.layout.contact_item, contactList);
ListView listView = (ListView)findViewById(R.id.contact_list);
listView.setAdapter(adapter);
}
private void getHead(){
Thread getHeadThread = new Thread(){
@Override
public void run(){
super.run();
if(list.size() > 0){
final String contactArray[] = list.toArray(new String[list.size()]);
for(int i = 0 ; i < 3 * AmountOfContact ; i++){
contactArray[i] = clearPunc(contactArray[i]);
Log.e("contactArray", contactArray[i]+"");
}
ConnectToServer.connect("ae86_v2_downloadHeadImg");
for(int i = 0 ; i < AmountOfContact; i++){
final String contactID = contactArray[i];
final String url = contactArray[i+AmountOfContact];
String json = "imageURL=" + url;
Log.e("json", json);
bitmap = ConnectToServer.getHead(json);
Log.e("bitmap", i + " " + bitmap.toString());
Contact contact = new Contact(contactID,bitmap);
contactList.add(contact);
}
Message message = new Message();
message.what = getData;
layoutHandler.sendMessage(message);
}else{
Log.e("contactArrayerror", "error");
}
}
};
getHeadThread.start();
}
private String clearPunc(String str){
String result = str.replace("[", "").replace("]", "").replace("\"", "");
result = result.replace("\\", "");
result = result.trim();
return result;
}
private void getContacts(){
Toast.makeText(this, "getContacts", Toast.LENGTH_SHORT).show();
Thread contactThread = new Thread(){
@Override
public void run(){
super.run();
Intent intent = getIntent();
String user = intent.getStringExtra("user");
//final String json = "id=" + user;
//ConnectToServer.connect("ae86_get_own_info");
String json = "userID=" + user;
ConnectToServer.connect("ae86_v2_getContact");
String contacts = ConnectToServer.postAndGetData(json);
Log.e("contacts", contacts);
if(contacts!=null){
try{
JSONObject dataJson = new JSONObject(contacts);
JSONArray contactIDs = dataJson.getJSONArray("contactID");
JSONArray headimageUrls = dataJson.getJSONArray("headImgURL");
JSONArray nickNames = dataJson.getJSONArray("nickname");
AmountOfContact = contactIDs.length();
Log.e("contactIDs", contactIDs.toString());
for(int i = 0 ; i < contactIDs.length(); i++){
list.add( contactIDs.getString(i) );
}
String[] stringArray = list.toArray(new String[list.size()]);
Log.e("stringArray", stringArray.toString());
for(int i = 0 ; i < contactIDs.length(); i++){
list.add( headimageUrls.getString(i) );
}
for(int i = 0 ; i < contactIDs.length(); i++){
list.add( nickNames.getString(i) );
}
stringArray = list.toArray(new String[list.size()]);
Log.e("stringArray", stringArray[6]);
Message message = new Message();
message.what = getData;
handler.sendMessage(message);
Log.e("handler","handler");
}catch(JSONException e){
e.printStackTrace();
}
}
}
};
contactThread.start();
}
}