1. 程式人生 > >Android中,子線程使用主線程中的組件出現問題的解決方法

Android中,子線程使用主線程中的組件出現問題的解決方法

play try tac demo androi cte over cep back

  Android中,主線程中的組件,不能被子線程調用,否則就會出現異常。

  這裏所使用的方法就是利用Handler類中的Callback(),接受線程中的Message類發來的消息,然後把所要在線程中執行的功能交由Handler類來處理。這樣就解決了線程出現的問題。

  下面測試實例功能為單擊圖片,圖片透明度改變為50,300毫秒後恢復不透明,代碼如下:

技術分享

public class Demo extends Activity{
    private ImageView changeImg = null;//ImageView組件
    Handler handler = new Handler(new
Handler.Callback() { @Override public boolean handleMessage(Message msg) { if(msg.what==0) {***//發來的Message的識別號*** changeImg.setImageAlpha(255);**//設置圖片的透明度為255,也就是不透明** } return false; } }); @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); **changeImg = (ImageView) findViewById(R.id.change_img);**//綁定圖片組件 } private class OnClick implements View.OnClickListener{//繼承單擊監聽類
@Override public void onClick(View v) { changeImg.setImageAlpha(50);//設置changeImg透明度 Toast.makeText(MainActivity.this, "該功能暫時還沒開發,敬請期待!", Toast.LENGTH_SHORT).show(); new Thread() {//延遲恢復changeImg的狀況 public void run(){ try { sleep(300);//延遲300毫秒 Message msg = new Message();//聲明並實例化一個Message類,用於通知Handler執行功能 msg.what=0;//msg對象的標識號 handler.sendMessage(msg);//發送msg對象,這樣會執行Callbak()事件 } catch (InterruptedException e) {//拋出異常 e.printStackTrace(); } } }.start(); } }

Android中,子線程使用主線程中的組件出現問題的解決方法