第一种方法:
利用Thread+handle实现,普通的message是无法保存集合信息的。这时我们采用序列化此集合的实体类的方法。
比如我的实体类叫Users,将它实现 Parcelable接口就可以了,编译器会自动编写几个方法。
public class Users implements Parcelable{
private String username;
private String covername;
private int id;
public Users(String username, String covername,int id) {
this.username = username;
this.covername = covername;
this.id = id;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getCovername(){
return covername;
}
public void setCsername(String covername){
this.covername = covername;
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
//下面所有的都是自动生成
protected Users(Parcel in) {
username = in.readString();
covername = in.readString();
id = in.readInt();
}
public static final Creator<Users> CREATOR = new Creator<Users>() {
@Override
public Users createFromParcel(Parcel in) {
return new Users(in);
}
@Override
public Users[] newArray(int size) {
return new Users[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(username);
dest.writeString(covername);
dest.writeInt(id);
}
}
这样在子线程中我们可以依靠bundle保存我们的集合数据,Bundle类是一个final类:
public final class Bundle extends Objectimplements Parcelable Cloneable
new Thread(new Runnable() {
@Override
public void run() {
try {
ArrayList<Users> usersList = new ArrayList<Users>();
//模拟数据添加,为耗时操作。
usersList.add(new Users(username,"",1));
Bundle bundle=new Bundle();
//bundle存入集合
bundle.putParcelableArrayList("usersList",usersList);
msg.setData(bundle);
handler.sendMessage(msg);
} catch (HyphenateException e) {
e.printStackTrace();
}
}
}).start();
主线程接收。
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bundle bundle = msg.getData();
ArrayList list =bundle.getParcelableArrayList("usersList");
if(list!=null) {
List<Users> userslist = list;
for (Users user : userslist) {
}
}
}
};
第二种方法:
我们直接利用android封装好的AsyncTask,可以很轻松的实现。
new AsyncTask<Void,Void,List<Users>>(){
@Override
protected List<Users> doInBackground(Void... params) {
List<String> usernames = new ArrayList<Users>();
//添加数据,模拟耗时操作
for (String username : usernames) {
usersList.add(new Users(username,""));
}
return usersList;
}
@Override
protected void onPostExecute(List<Users> usersList) {
super.onPostExecute(usersList);
if(usersList!=null) {
for (Users user : usersList) {
}
}
}
}.execute();