1

System.NanoTime を使用して経過時間を追跡していますが、UI で更新されません。以下は私のコードです:

ただし、私はこの方法ですべてを行っています。onCreate()私が取ったアプローチは堅牢ではないかもしれませんが、それは私がもっとアイデアが欲しいところです.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    long startTime = System.nanoTime();
    // ... the code being measured ...
    long estimatedTime = (System.nanoTime() - startTime) / 1000000000;
    System.out.println(""+estimatedTime);
    while (estimatedTime <= 100){
        System.out.println(""+estimatedTime);

        if(estimatedTime == 1){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Preparing"); 

        }
        if(estimatedTime == 2){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Inatializing"); 

        }
        if(estimatedTime == 3){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Preparing to install"); 

        }
        if(estimatedTime == 4){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Installing"); 

        }
        if(estimatedTime == 5){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Installed"); 

        }
        if(estimatedTime == 6){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Unzipping packages..."); 

        }


        estimatedTime = (System.nanoTime() - startTime) / 1000000000;
    }

}
4

4 に答える 4

3

多分あなたは試すことができます:

tx.postInvalidate();

tx は TextView オブジェクトです

この行の後:

estimatedTime = (System.nanoTime() - startTime) / 1000000000;

ただし、「while」の下にあるこのすべてのコードをスレッドに入れる必要があります。例:

new Thread(new Runnable() {

        @Override
        public void run() {
            //your code here
        }
    }).start();

更新:これを使用してメインスレッドを更新します:

YourActivity.this.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        //here set text into textView
    }
});
于 2013-09-06T11:08:35.243 に答える
1

Handler を使用してタスクを遅らせた方が良い...

Handler handler = new Handler();
handler.postDelayed(new Runnable(){ 
    public void Run(){
        //Put your code here. Code will execute after 1000ms
    }
}, 1000);
于 2013-09-06T11:22:46.370 に答える
1

別のスレッドを使用して runOnUiThread メソッドを呼び出し、そのスレッドのオブジェクトを渡します。

Thread th=new Thread(new Runnable() {



        @Override
        public void run() {
            //put your code here
while (estimatedTime <= 100){
Thread.sleep(1000);
            System.out.println(""+estimatedTime);

        if(estimatedTime == 1){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Preparing"); 

        }
        if(estimatedTime == 2){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Inatializing"); 

        }
        if(estimatedTime == 3){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Preparing to install"); 

        }
        if(estimatedTime == 4){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Installing"); 

        }
        if(estimatedTime == 5){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Installed"); 

        }
        if(estimatedTime == 6){
            TextView tx = (TextView)findViewById(R.id.textView);
            tx.setText("Unzipping packages..."); 

        }


        estimatedTime = (System.nanoTime() - startTime) / 1000000000;
        }
    });

runOnUiThread(th);

于 2013-09-06T11:11:04.983 に答える