Java 运行、暂停和恢复线程

Java 运行、暂停和恢复线程,java,android,runnable,onresume,onpause,Java,Android,Runnable,Onresume,Onpause,我的应用程序运行正常,但我不明白为什么我的void run();单击“主页”按钮时仍在后台运行 我希望我的线程在暂停时暂停线程,并在调用onResume()时再次启动线程 我想不出我做错了什么 我的代码: public class MainActivity extends ActionBarActivity { Thread thread; @Override protected void onCreate(Bundle savedInstanceState) { super.on

我的应用程序运行正常,但我不明白为什么我的void run();单击“主页”按钮时仍在后台运行

我希望我的线程在暂停时暂停线程,并在调用onResume()时再次启动线程

我想不出我做错了什么

我的代码:

public class MainActivity extends ActionBarActivity {

Thread thread;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    thread = new Thread(new MyThread());
    thread.start();

}


@Override
protected void onPause() {
    super.onPause();
    this.thread.interrupt();

    Log.d("Method:","OnPause();");



}

@Override
protected void onResume(){
    super.onResume();
    this.thread.run();
    Log.d("Method:","onResume();");

}


@Override
protected void onDestroy(){
    super.onDestroy();
    this.thread.interrupt();
    finish();
    Log.d("Method:","onDestroy();");

}
}

内部类:

public class MyThread implements Runnable{

    @Override
    public void run() {

        while(!Thread.currentThread().isInterrupted()){
            if(Thread.currentThread().isInterrupted()){

                break;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Log.d("Method","void run()");
            //Creates a file with SharedPreferences and make editable
            SharedPreferences preferences = getSharedPreferences("MyPrime", Context.MODE_PRIVATE);
            final SharedPreferences.Editor editor = preferences.edit();

            Random random = new Random();
            BigInteger bigInteger = new BigInteger(10,random);

            //Loads and gets the last int value store in the file
            SharedPreferences preferences1 = getSharedPreferences("MyPrime",Context.MODE_PRIVATE);
            final int numberInFile = preferences1.getInt("MyPrime",0);

            if(bigInteger.isProbablePrime(random.nextInt(500))){
                if(numberInFile < bigInteger.intValue()){
                    editor.putInt("MyPrime",bigInteger.intValue());
                    editor.commit();

                }
            }
        }

    }

}
公共类MyThread实现可运行{
@凌驾
公开募捐{
而(!Thread.currentThread().isInterrupted()){
如果(Thread.currentThread().isInterrupted()){
打破
}
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
Log.d(“方法”,“无效运行()”);
//创建具有SharedReferences的文件并使其可编辑
SharedReferences首选项=GetSharedReferences(“MyPrime”,Context.MODE\u PRIVATE);
final SharedPreferences.Editor=preferences.edit();
随机=新随机();
BigInteger BigInteger=新的BigInteger(10,随机);
//加载并获取文件中的最后一个int值存储
SharedReferences首选项1=GetSharedReferences(“MyPrime”,Context.MODE\u PRIVATE);
final int numberInFile=preferences1.getInt(“MyPrime”,0);
if(bigInteger.isProbablePrime(random.nextInt(500))){
if(numberInFile
这是因为您正在捕获并忽略中断线程时抛出的
中断异常。不要忽略例外情况


如果您查看一下,您可以看到,如果您在线程等待
睡眠
调用时中断该线程,将抛出该异常,并清除中断状态(即
isInterrupted()
将返回false)。你的线程可能大部分时间都在睡眠调用中,因此很可能会被中断。

从onCreate中删除代码,并使onResume像这样工作

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
protected void onResume(){
    super.onResume();
    thread = new Thread(new MyThread());
    thread.start();
    Log.d("Method:","onResume();");
}

这并没有解决任何问题,void run()仍在每1秒运行一次logCat@Spoofy在暂停时,你需要终止线程。设置一个布尔变量或您习惯于执行的任何操作。让你的线程检查这个变量,决定是否继续循环谢谢!真管用!我刚刚了解了一些关于例外的情况!:)我将catch语句更改为:
try{Thread.sleep(1000);}catch(interruptedeexception e){Thread.currentThread().interrupt();}