我在Android中创建了一个简单的例子:点击按钮,在背景中创建一个新的线程。
但是当我把它打开(Thread.sleeps(10000)
)时,它也会阻止UIThread。
为什么它也会阻止UIThread?我的线程应该以异步方式在后台运行。有没有办法在不使用AsyncTask
和doInBackground
方法的情况下在后台运行线程?有什么建议吗?
提前致谢
这里是代码:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) { return true; }
return super.onOptionsItemSelected(item);
}
public void dothings(View view){
new Thread(){
public void run(){
try{Thread.sleep(10000);}
catch(Exception e){}
}
}.run();
Toast.makeText(getApplicationContext(),"CIao",Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:0)
您需要调用Start()
函数而不是run()
函数
答案 1 :(得分:0)
要提供有关Itzik的答案的更多详细信息,通过在线程实例上调用run
,您实际上正在执行start()
方法,在该方法中您定义了睡眠。因为从主线程调用了这个10秒,你会看到UI冻结。
<div class="row">
<div class="small-6 columns valign">vertically align me</div>
<div class="small-6 columns"><p>content</p>.....</div>
</div>
.row{
display: table;
}
.valign{
display: table-cell;
vertical-align: middle;
background: grey;
height: 100%;
}
实际上将开始执行线程,VM执行线程的run()方法。