我需要在我的buttonclick操作10秒后看到我的imageview。我让我的imageview不可见。但是当我尝试在线程睡眠(10000)后将其设置为可见时,我的应用程序崩溃了。我该如何解决这个问题?请帮忙!
答案 0 :(得分:2)
这个很短,不会阻止应用程序:
yourButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
yourImageView.postDelayed(new Runnable() {
@Override
public void run() {
if (yourImageView != null) {
yourImageView.setVisibility(View.VISIBLE);
}
}
}, 10000);
}
});
某些上下文:postDelayed向主线程发布消息,该消息将在10000毫秒内执行,即10秒。当10秒过去时,主线程将接收消息,并尝试执行runnable。该按钮可能不再存在,因为您离开了屏幕,这就是为什么需要进行空检查。
答案 1 :(得分:0)
我认为你在主线程上做了Thread.sleep(),这不是一个正确的方法。
相反,您可以使用AsyncTask或Handler来延迟某些代码的执行。
button.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Thread.sleep(10000);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
yourView.setVisibility(VISIBLE);
}
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
});
答案 2 :(得分:0)
你不能阻止你的主线程不超过5秒,以及你的线程也是如此。而不是使用线程然后让睡眠,更好的用户Timer。
class MyTimerTask extends TimerTask {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashScreen.this,
MainActivity.class);
startActivity(intent);
finish();
}
});
}
}
了解更多内容请阅读here