我是完全以新的Android,只是想知道,如果它是任何工作和可能的方法来更新主线程之外的用户界面。只是从我的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(){ //这里的东西 }});
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
}
});