我有两个简单的活动MainActivity
和ThreadActivity
。我从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();
}
}