Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> android更新UI的幾種方法

android更新UI的幾種方法

編輯:Android開發教程

作為IT新手,總以為只要有時間,有精力,什麼東西都能做出來。這種念頭我也有過,但很快就熄滅了, 因為現實是殘酷的,就算一開始的時間和精力非常充足,也會隨著項目的推進而逐步消磨殆盡。我們會發現, 自己越來越消極怠工,只是在無意義的敲代碼,敲的還是網上抄來的代碼,如果不行,繼續找。

這就 是項目進度沒有規劃好而導致的。

最近在做有關藍牙的項目,一開始的進度都安排得很順利,但是因 為測試需要兩部手機,而且還要是android手機,暑假已經開始了,同學們都回家了,加上我手機的藍牙壞了 ,導致我的進度嚴重被打亂!而且更加可怕的是,就算我手機這邊調試完畢,我最終的目標是實現手機與藍牙 模塊的通信,那個測試板至今未送過來,所以,我開始消極怠工了。

經驗教訓非常簡單:根據整個項 目的時間長度規劃好每天的進度,視實際情況的變化而改變規劃,就算真的是無法開展工作,像是現在這樣抽 空出來寫寫博客都要好過無意義的敲代碼。

今天講的內容非常簡單,只是講講有關於android界面更新 的方面。

1.利用Looper更新UI界面

如果我們的代碼需要隨時將處理後的數據交給UI更新,那麼 我們想到的方法就是另開一個線程更新數據(也必須這麼做,如果我們的數據更新運算量較大,就會阻塞UI線 程),也就是界面更新和數據更新是在不同線程中(android采用的是UI單線程模型,所以我們也只能在主線程 中對UI進行操作),但這會導致另一個問題:如何在兩個線程間通信呢?android提供了Handler機制來保證這 種通信。

先是一個簡單的例子:

public class MainActivity extends Activity {
    private Button mButton;
    private TextView mText;
        
    @SuppressLint("HandlerLeak")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            
        mButton = (Button)this.findViewById(R.id.button);
        mText = (TextView)this.findViewById(R.id.text);
            
        final Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg){
                super.handleMessage(msg);
                if(msg.what == 1){
                    mText.setText("更新後");
                }
            }
        };
            
        mText.setText("更新前");
        final Thread thread = new Thread(new Runnable(){
    
            @Override
            public void run() {
                 Message message = new Message();
                 message.what = 1;
                 handler.sendMessage(message);
            }
                
        });
        mButton.setOnClickListener(new OnClickListener() {
                
            @Override
            public void onClick(View v) {
                 thread.start();
            }
        });
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved