本文介绍了Android的取消闪屏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图创建一个具有横幅醒目网页和取消按钮,按以下规则:
I'm trying to create a Splash page that has a banner and cancel button, by the following rules:
- 如果没有什么是pressed,转到主要活动5秒后。
- 如果取消按钮是pressed,马上去主要活动。
- 如果旗帜,是pressed,去其他的活动。
我的code:
public class BannerSplashActivity extends Activity {
private static final int TIMEOUT = 5000;
private View mButtonCancel;
private SplashHolderTask mSplashHolderTask;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form_banner_splash);
// Excecute task
mSplashHolderTask = new SplashHolderTask();
mSplashHolderTask.execute();
// find references
mButtonCancel = findViewById(R.id.buttonCancel);
mButtonCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSplashHolderTask.cancel(true);
goToMainActivity();
}
});
}
private void goToMainActivity(){
startActivity(new Intent(this, MainActivity.class));
finish();
}
/**
* This task holds the bannerSplash
*/
private class SplashHolderTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
goToMainActivity();
}
}, TIMEOUT);
return null;
}
}
}
当我运行我的code我得到:
When I run my code I'm getting:
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
我怎样才能实现这个逻辑?
How can I implement that logic?
推荐答案
的例外
,因为你创建一个处理程序
里面另一个线程..
通过改变你的code这样你可以得到你想要的东西。
The Exception
because you creating a Handler
inside another thread..By changing your code like this you can get what you want exactly..
public class BannerSplashActivity extends Activity {
private static final int TIMEOUT = 5000;
private View mButtonCancel;
private Handler handler = new Handler();
private Runnable runnable;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form_banner_splash);
runnable = new Runnable() {
@Override
public void run() {
goToMainActivity();
}
};
handler.postDelayed(runnable, TIMEOUT);
// find references
mButtonCancel = findViewById(R.id.buttonCancel);
mButtonCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.removeCallbacks(runnable);
goToMainActivity();
}
});
}
private void goToMainActivity() {
startActivity(new Intent(this, MainActivity.class));
finish();
}
}
我没有使用任何线程或AsynchTasks。
I am not using any Threads or AsynchTasks.
这篇关于Android的取消闪屏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!