package com.example.myapp;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onResume() {
super.onResume();
sleepForaWhile();
}
protected void sleepForaWhile()
{
try
{
Thread.sleep(10000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当此活动开始时,我看到黑屏(不是活动布局)。然后,布局在10秒后显示,但我希望布局在睡眠代码之前可见。
如何创建此行为?
我试图将睡眠代码放在onStart()
函数中,但没有任何改变。
答案 0 :(得分:2)
你有
Thread.sleep(10000);
阻止ui线程。永远不要阻止ui线程。请删除sleep()
。
我不知道为什么你需要延迟。您可以延迟使用Handler
。同样onCreate
然后onResume
。
答案 1 :(得分:1)
假设这只是一个示例,(我假设您使用Thread.sleep()
来表示任意长时间运行的任务)您需要移动Thread.sleep()
关闭UI的方法。
在UI线程上的所有内容完成之前,UI不会返回视图。相反,我们可以使用AsyncTask
public class DoSomethingTask extends AsyncTask<Void,Void,Void> {
private OnCompletionListener listener;
// Pass the interface using this method
public setOnCompletionListener(OnCompletionListener listener){
this.listener = listener;
}
protected Void doInBackground(Void... params) {
Thread.sleep(10000);
}
protected void onPostExecute(Void result) {
// This will be called after the doInBackground method.
// This method is called on the UI thread.
// If an instance has been passed, you can access the
// onComplete method
if (listener != null) {
listener.onComplete();
}
}
// Create an interface
public interface OnCompletionListener {
void onComplete();
}
}
您可以通过以下方式从活动中调用此内容:
DoSomethingTask task = new DoSomethingTask();
task.setOnCompletionListener(new OnCompletionListener() {
// put the activity methods in here
});
task.execute();`
这意味着将显示布局,然后在后台运行AsyncTask,执行您需要执行的任何操作。如果您愿意,可以从onPostExecute方法更新布局。