我做了一个线程(我将在这一刻之后调用主线程)控制1000ms睡眠的时间并更改主要活动中的一些变量。我在布局中显示变量。
不知何故,当主线程工作时,我需要进行另一个活动,然后需要返回主要活动。
理论上,我知道,线程并没有停止。好吧,这对我有好处,我需要随时使用算法改变变量。但是当我去另一个活动然后返回主线程的活动时,变量正在改变,就像第二次开始的maint线程一样。所有变量都比它们必须的大2倍。当我去另一个活动并返回主要的第三次时,变量变大3倍。 在其他活动中,我只使用此代码;
startActivity(new Intent(n7Activity.this, MainActivity.class));
我想问一下,假设我在主要活动中开始一个线程,然后我用经典的intent方法转到另一个活动,(顺便说一句,我不使用任何暂停方法或smthg。)然后当我返回到主要活动,是第一个线程仍在工作时第二次启动相同的线程吗?
很多。答案 0 :(得分:0)
startActivity()
创建一个新的Activity实例。我认为应该在另一个Activity中调用finish()
来回到主Activity。
答案 1 :(得分:0)
当我返回主活动时,同一个线程在第一个线程仍在工作时第二次启动?
似乎是这样。
您创建线程的方法是什么?如果它在onCreate
中,则您的线程只会创建一次,因为在活动生命周期中只调用onCreate
一次。
尽管如此,我建议您改用Timer
或Handler
。它们具有您所需要的功能。在这种情况下,您无需手动分派线程。
注意活动生命周期也很重要,因此没有线程会为不在前端的活动消耗CPU。例如,在活动上调用OnPause
时,您应该停止计时器。
实际上,您可以在Timer
中安排重复任务。这是一个例子:
public class MyActivity extends Activity {
private Timer mMyTimer;
@Override
protected void onResume() {
super.onResume();
mMyTimer = new Timer();
// 0L means "start right now".
// 1000L is the period between executions in ms.
mMyTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// It's a background thread, so
// don't update the UI directly from here.
doStuff();
}
}, 0L, 1000L);
}
Override
protected void onPause() {
super.onPause();
mMyTimer.cancel();
mMyTimer = null;
}
}