SetContentView 在我使用处理程序时不起作用
SetContentView does not work while I'm using handler
我正在尝试使用 Thread
让应用进入睡眠状态。我有 2 个解决方案,但其中一个导致了问题。
这是一个更短的完美运行的代码:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
final Handler goToMenu = new Handler();
goToMenu.postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(getApplicationContext(), Menu.class);
startActivity(i);
}
},5000);
}
但是这个有问题。当我以毫秒为单位设置时间让应用程序等待时,它会工作并且第二个 Activity 开始但 R.layout.welcome
不会出现。该应用程序只是在灰色背景下等待,直到 startActivity(i)
被执行。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
final Handler goToMenu = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
Intent i = new Intent(getApplicationContext(), Menu.class);
startActivity(i);
}
};
Runnable run = new Runnable() {
@Override
public void run() {
try {
synchronized (this) {
wait(5000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.d(TAG, "Waiting didnt work!!");
e.printStackTrace();
}
goToMenu.sendEmptyMessage(0);
}
};
Thread waitThread = new Thread(run);
waitThread.run();
怎么了?
使用
Handler.postDelayed(new Runnable(){}, DELAY_TIME) instead
你的情况
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(getApplicationContext(), Menu.class);
startActivity(i);
}
}, 5000);
为了显示布局,Activity 的 onCreate()
方法应该 运行 完整。在您的第二个代码中有一个线程。该线程会停止您的代码编译 5000 毫秒。这意味着您的第二个代码在 wait(5000);
行停止并等待 5 秒。因此 onCreate()
方法没有完成。
您已经使用了 Handler().postDelayed()
您的第一个代码。这种方法不会卡住代码。这是一个后台任务。它同步工作。
我希望你的答案在这里。
要开始新线程,请使用 Thread#start()
而不是 Thread#run()
。
run()
只是同步执行 Runnable
即阻塞当前线程。
我正在尝试使用 Thread
让应用进入睡眠状态。我有 2 个解决方案,但其中一个导致了问题。
这是一个更短的完美运行的代码:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
final Handler goToMenu = new Handler();
goToMenu.postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(getApplicationContext(), Menu.class);
startActivity(i);
}
},5000);
}
但是这个有问题。当我以毫秒为单位设置时间让应用程序等待时,它会工作并且第二个 Activity 开始但 R.layout.welcome
不会出现。该应用程序只是在灰色背景下等待,直到 startActivity(i)
被执行。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
final Handler goToMenu = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
Intent i = new Intent(getApplicationContext(), Menu.class);
startActivity(i);
}
};
Runnable run = new Runnable() {
@Override
public void run() {
try {
synchronized (this) {
wait(5000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.d(TAG, "Waiting didnt work!!");
e.printStackTrace();
}
goToMenu.sendEmptyMessage(0);
}
};
Thread waitThread = new Thread(run);
waitThread.run();
怎么了?
使用
Handler.postDelayed(new Runnable(){}, DELAY_TIME) instead
你的情况
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(getApplicationContext(), Menu.class);
startActivity(i);
}
}, 5000);
为了显示布局,Activity 的 onCreate()
方法应该 运行 完整。在您的第二个代码中有一个线程。该线程会停止您的代码编译 5000 毫秒。这意味着您的第二个代码在 wait(5000);
行停止并等待 5 秒。因此 onCreate()
方法没有完成。
您已经使用了 Handler().postDelayed()
您的第一个代码。这种方法不会卡住代码。这是一个后台任务。它同步工作。
我希望你的答案在这里。
要开始新线程,请使用 Thread#start()
而不是 Thread#run()
。
run()
只是同步执行 Runnable
即阻塞当前线程。