这里有个新手。
我做了一个线程(我将调用主线程在这一刻之后),它控制的时间与1000ms睡眠和改变一些变量在主activity.And我显示的布局中的变量。
不知何故,当主线程工作时,我需要转到另一个活动,然后需要返回到主活动。
理论上我知道,线程不会停止。好的,这对我来说很好,我需要用算法随时改变变量。
但是当我转到另一个活动,然后返回到主线程的活动时,变量发生了变化,就像维护线程第二次启动一样。所有的变量都比它们必须的大2x倍。当我转到另一个活动并第三次返回main时,变量的变化是原来的3倍。在另一个活动中,我只使用了这段代码,没有使用其他代码;
startActivity(new Intent(n7Activity.this, MainActivity.class));我想问一下,假设我在主活动中启动了一个线程,然后我使用经典的intent方法转到了另一个活动(顺便说一句,我没有使用任何on pause方法或smthg)。那么当我返回到main activity时,是否同一线程启动了第二次,而第一个线程仍在工作?
非常感谢。
发布于 2016-11-07 06:12:41
startActivity()创建一个新的Activity实例。我认为应该在另一个活动中调用finish()来返回到主活动。
发布于 2016-11-07 06:50:12
当我返回main activity时,是否同一线程启动了第二次,而第一个线程仍在工作?
看起来是这样的。
你用什么方法创建你的线程?如果它在onCreate中,那么您的线程将只创建一次,因为onCreate在活动生命周期中只被调用一次。
尽管如此,我还是建议您使用Timer或Handler。它们的特性正是您所需要的。在这种情况下,您不需要手动分派线程。
注意活动的生命周期也很重要,这样不会有线程为不在前台的活动消耗CPU。例如,当在activity上调用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;
}
}https://stackoverflow.com/questions/40454861
复制相似问题