0

即使我按下后退按钮,我的计时器仍在运行,并且在指定时间后执行下一个活动。我该如何阻止这个?飞溅.java:

package com.ultimate.biggboss;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.VideoView;
public class Splash extends Activity{
    VideoView vid;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
        vid = (VideoView)findViewById(R.id.video);
        String urlpath="android.resource://" + getPackageName() + "/" + R.raw.logoanimate;
        vid.setVideoURI(Uri.parse(urlpath));
        vid.start();
        Thread timer = new Thread(){
            public void run(){
                try{
                    sleep(4400);
                } catch (InterruptedException e){
                    e.printStackTrace();
                }finally{ 
                    Intent openHome = new Intent(Splash.this, main.class);
                    startActivity(openHome);
                    finish();
                }
            }
        };
        timer.start();
    }

}

按下后退按钮后,我要编写什么代码以及在此类中的何处停止应用程序?

4

4 回答 4

0

我认为您可以使用标志来停止线程,以下是我的做法:

public static int flag=0;//whenever flag=1, stop the thread. Flag should be a static global variable

@Override
public void onBackPressed() {
    flag=1;
}

//My thread code was somewhat like this:

Thread timer = new Thread(){
            public void run(){
                try{
                     while(1)
                     {
                         if(flag==0)
                              //My code here
                         else
                               stopThread(this);
                     }
                } catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        };
        timer.start();

stopThread() 的代码如下:

private synchronized void stopThread(Thread theThread)
{
    if (theThread != null)
    {
        theThread = null;
    }
}

这段代码对我有用。希望对你也有帮助。

于 2013-09-11T09:55:31.910 回答
0

您可以通过以下方式处理后退键:

@Override
public void onBackPressed() {
    // your code.
}

在 API 5 之前使用这个:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // your code
    }
    return super.onKeyDown(keyCode, event);
}               

在此内部,您可以执行以下操作:

if(null != timer){
        timer.cancel();
}
于 2013-09-11T09:46:51.347 回答
0

请注意,线程的 stop()、suspend() 等方法已被弃用,安全终止线程的唯一方法是让它退出其 run() 方法。

尝试以下操作:

public class MyThread extends Thread {

private long sleepTime;
private boolean stop;   

public MyThread(long sleepTime) {       
    this.sleepTime = sleepTime;
    stop = false;
}

public void run() {

    do {
        try {

            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    } while (!stop);
}

// soft stopping of thread
public synchronized void stopThread() {
    stop = true;
}

}

要启动线程:

MyThread timer = new MyThread(4400);
timer.start();

停止线程:

timer.stopThread();

因此,您可以在按下后退按钮时处理它,例如:

@Override
public void onBackPressed() {

    if(timer != null){
      timer.stopThread();
      timer = null;
    }
}
于 2013-09-11T09:51:36.967 回答
0

你应该中断线程

 public void onBackPressed() 
{
     timer.interrupt();
     this.finish();
 }
于 2013-09-11T09:52:25.257 回答