Android:后台线程设置为休眠,但仍然阻止UITread

时间:2015-06-27 15:28:30

标签: android multithreading background sleep ui-thread

我在Android中创建了一个简单的例子:点击按钮,在背景中创建一个新的线程。 但是当我把它打开(Thread.sleeps(10000))时,它也会阻止UIThread。

为什么它也会阻止UIThread?我的线程应该以异步方式在后台运行。有没有办法在不使用AsyncTaskdoInBackground方法的情况下在后台运行线程?有什么建议吗?

提前致谢

这里是代码:

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();

    }
}

2 个答案:

答案 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()方法。