我有两个简单的活动MainActivityThreadActivity。我从ThreadActivity呼叫MainActivity
MainActivity的代码:

public class MainActivity extends Activity {
    private Button btn;

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

        btn = (Button)findViewById(R.id.btn2);
        btn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this, ThreadActivity.class);
                 startActivity(intent);
             }
         });
    }
}


ThreadActivity的代码:

public class ThreadActivity extends Activity{

    private Thread myThread=null;
    Button btn;
    int i = 0;

     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.custom);

         btn = (Button)findViewById(R.id.btn);
         btn.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                     runThread();
             }
         });
     }

     void  runThread(){
         myThread = new Thread() {
                public void run() {
                    while (i++ < 1000) {
                        try {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    btn.setText("#" + i);
                                    Log.d("Thread", "I am running " + i);
                                }
                            });
                            Thread.sleep(300);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                            return;
                        }
                    }
                }
            };
            myThread.start();
     }
}


当我启动ThreadActivity时,我运行一个简单的线程并更改按钮文本。

我的问题


当我失去对应用程序的关注时,即当应用程序变得部分可见时,我又回来了,我被重定向到ThreadActivity并且线程仍在运行。
当我让应用程序运行并打开新的应用程序,然后再返回时,我再次重定向到ThreadActivity


问题是当我按下“后退”按钮时,我被重定向到第一个活动MainActivity。但是,当按下后退按钮时,我希望我的应用程序退出。简而言之,MainActivity不应该存在于堆栈中。

我尝试将android:noHistory="true"设置为MainActivity,但无法保持项目符号中解释的行为正常。我的意思是,当我暂停应用程序并将其还原时,它会将我重定向到MainActivity而不是ThreadActivity

最佳答案

在启动finish()时只需调用ThreadActivity

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, ThreadActivity.class);
        startActivity(intent);
        finish();
    }
});


但是您的应用存在问题。使用Timer设置Button的文本!像您一样使用Thread会造成内存泄漏,这非常糟糕。尝试这个:

private int i = 0;
private Timer timer;
private final TimerTask timerTask = new TimerTask() {

    @Override
    public void run() {
        btn.post(new Runnable() {
            @Override
            public void run() {
                btn.setText("#" + i++);
            }
        });
    }
};


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custom);

    btn = (Button)findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            timer = new Timer();
            timer.schedule(timerTask, 300, 300);
        }
    });
}

@Override
public void onPause() {
    super.onPause();

    if(timer != null) {
        timer.cancel();
    }
}

09-11 03:26