更新主线程外的UI主线、UI

2023-09-07 03:42:49 作者:搬石头砸别人的脚

我是完全以新的Andr​​oid,只是想知道,如果它是任何工作和可能的方法来更新主线程之外的用户界面。只是从我的code我在下面列出我知道从code;这是不可能的。但是,事情是的我只是想更新使用另一个线程的UI 。请帮我在此先感谢!

 包com.example.app; 进口了java.util.Random;  进口android.os.Bundle;  进口android.app.Activity;  进口android.view.Menu; 进口android.view.View;  进口android.widget.Button; 进口android.widget.ImageView;进口android.widget.TextView;公共类MainActivity延伸活动{私人键b;公共ImageView的I1; 公共ImageView的I2; 公共ImageView的I3;公共ImageView的I4;公众的TextView笔;公众的TextView S;@覆盖保护无效的onCreate(捆绑savedInstanceState){super.onCreate(savedInstanceState);的setContentView(R.layout.activity_main); I1 =新ImageView的(本); I1 =(ImageView的)findViewById(R.id.imag1); I1.setVisibility(View.INVISIBLE); I2 =新ImageView的(本); I2 =(ImageView的)findViewById(R.id.imag2); I2.setVisibility(View.INVISIBLE); I3 =新ImageView的(本); I3 =(ImageView的)findViewById(R.id.imag3); I3.setVisibility(View.INVISIBLE); I4 =新ImageView的(本); I4 =(ImageView的)findViewById(R.id.imag4); I4.setVisibility(View.INVISIBLE); T =(的TextView)findViewById(R.id.time); S =(的TextView)findViewById(R.id.score);线程t =新主题(新MyThread的());t.start();  }@覆盖公共布尔onCreateOptionsMenu(菜单菜单){//充气菜单;如果是present这增加了项目操作栏。。getMenuInflater()膨胀(R.menu.main,菜单);返回true;}私有类MyThread的实现Runnable {随机randomGenerator =新的随机();INT N;公共无效的run(){    而(真){        N = randomGenerator.nextInt(8);        如果(N == 1){            I1.setVisibility(View.VISIBLE);        }        如果(N == 2){            I2.setVisibility(View.VISIBLE);        }        如果(N == 3){            I3.setVisibility(View.VISIBLE);        }        如果(N == 4){            I4.setVisibility(View.VISIBLE);        }        尝试{            Thread.currentThread()睡眠(500)。        }赶上(InterruptedException的E){            // TODO自动生成catch块             e.getStackTrace();        }    }   }   }   } 

解决方案

使用activity.runOnUiThread

  Acivity.runOnUiThread(新的Runnable(){    公共无效的run(){        //这里的东西    }}); 
handler明明已经在主线程中调用了,为何更新不了UI线程的 android.view.Vi... 慕课问答

I am totaly new to android and just want to know if it is any working and possible way to update the UI outside the main thread. Just from my code I have listed below I know that from this code; It is not possible at all. But, the thing is I just want to update the UI using another thread. Please help me thanks in advance!

 package com.example.app;

 import java.util.Random;
  import android.os.Bundle;
  import android.app.Activity;
  import android.view.Menu;
 import android.view.View;
  import android.widget.Button;
 import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {
private Button b;
public ImageView I1;
 public ImageView I2;
 public ImageView I3;
public ImageView I4;
public TextView T;
public TextView s;
@Override

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

 I1=new ImageView(this);
 I1=(ImageView) findViewById(R.id.imag1);
 I1.setVisibility(View.INVISIBLE);

 I2=new ImageView(this);
 I2=(ImageView) findViewById(R.id.imag2);
 I2.setVisibility(View.INVISIBLE);

 I3=new ImageView(this);
 I3=(ImageView) findViewById(R.id.imag3);
 I3.setVisibility(View.INVISIBLE);

 I4=new ImageView(this);
 I4=(ImageView) findViewById(R.id.imag4);
 I4.setVisibility(View.INVISIBLE);

 T=(TextView)findViewById(R.id.time);
 s=(TextView)findViewById(R.id.score);

Thread t=new Thread(new MyThread());
t.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;
}

private class MyThread implements Runnable{
Random randomGenerator = new Random();
int n;
public void run(){

    while(true){
        n=randomGenerator.nextInt(8);

        if(n==1){
            I1.setVisibility(View.VISIBLE);

        }
        if(n==2){
            I2.setVisibility(View.VISIBLE);
        }

        if(n==3){
            I3.setVisibility(View.VISIBLE);
        }

        if(n==4){
            I4.setVisibility(View.VISIBLE);
        }
        try {
            Thread.currentThread().sleep(500);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
             e.getStackTrace();
        }
    }

   }




   }
   }

解决方案

Use activity.runOnUiThread

Acivity.runOnUiThread(new Runnable() {
    public void run() {
        //something here
    }
});

 
精彩推荐