我有两个简单的活动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
。
答案 0 :(得分:1)
启动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();
}
}
答案 1 :(得分:1)
从您对其他人的评论&#39;答案,似乎您希望在线程运行时始终恢复ThreadActivity而不是MainActivity。
finish()
,则用户无法看到MainActivity中的任何UI 答案 2 :(得分:0)
我必须为android:noHistory="true"
设置MainActivity
,ThreadActivity
我必须在此quesiotn
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}