Android新建子线程的一些问题(如何获知已经结束子线程,子线程基本常识等)

比如如下代码当中包含了两个子线程,通过这次应该了解到的关于子线程的一些问题是:
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();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值