我有泼水活动和1个线程。线程启动计时器,一段时间后主要活动将开始。 与其他应用程序不同,我不想在Splash Activity中禁用backPressed按钮。我想按下后退按下取消线程并完成活动。但我无法让它发挥作用。 这是我的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.starter);
Thread Logo = new Thread() {
public void run() {
try {
sleep(1 * 1500);
Intent i = new Intent(getBaseContext(),
MainActivity.class);
startActivity(i);
finish();
} catch (Exception exception) {
}
}
};
Logo.start();
}
...
@Override
public void onBackPressed() {
Thread.currentThread().interrupt();
super.onBackPressed();
this.finish();
}
}
但是这不会停止线程,它只会完成活动并且线程在后台运行(并且ofc启动活动)
答案 0 :(得分:2)
全局制作线程徽标对象并执行Logo.interrupt();
您应该停止之前已经开始的主题。以及@TmKVU回答Thread.currentThread();
返回主UI/Main
主题,但您必须停止徽标主题。
答案 1 :(得分:2)
尝试此操作如果您希望在用户按下后退按钮时停止线程:
@Override
public void onBackPressed()
{
// First check if the thread isAlive(). To avoid NullPointerException
if(Logo.isAlive())
{
Logo.interrupt();
}
super.onBackPressed();
}
答案 2 :(得分:1)
这样做:
private Thread thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
thread = new Thread(new Runnable() {
@Override
public void run() {
try {
// your logic
SplashActivity.this.finish();
} catch (InterruptedException e) {
finish();
}
}
});
thread.start();
}
@Override
public void onBackPressed() {
thread.interrupt();
super.onBackPressed();
}
它可以在我的所有应用程序中运行。因为当你进入线程时,将调用InterruptedException
。那时完成你的活动。
答案 3 :(得分:0)
Thread.currentThread()
会引用您Main
个帖子,因为它是当前有效的Thread
。
您应该从您的主题创建一个字段,以便您可以使用onBackPressed()
方法访问该字段。然后,您可以拨打logo.interrupt()
答案 4 :(得分:0)
使用处理程序和 Runnable 。 而不是内部新的Runnable,在外部创建它作为对象,然后将其作为参数传递给处理程序。按下后,调用此方法handler.removeCallbacks(runnable);
取消执行。确保将变量保存在全局范围内,以便您可以在任何地方访问它们。
handler = new Handler();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
finish();
}
}, SPLASH_SCREEN_TIMEOUT);
答案 5 :(得分:0)
试试这段代码,它可能对您有帮助。
private Thread Logo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.starter);
logo = new Thread() {
public void run() {
try {
if(!isInterrupted()){
sleep(1 * 1500);
Intent i = new Intent(getBaseContext(),
MainActivity.class);
startActivity(i);
finish();
}
} catch (Exception exception) {
}
}
};
Logo.start();
}
@Override
protected void onStop() {
super.onStop();
System.out.println("On Stop");
logo.interrupt();
}
...
@Override
public void onBackPressed() {
logo.interrupt();
super.onBackPressed();
}
}