Android Studio,Thread一遍又一遍地开始

时间:2016-11-06 21:43:22

标签: java android multithreading

这是一个新手。

我做了一个线程(我将在这一刻之后调用主线程)控制1000ms睡眠的时间并更改主要活动中的一些变量。我在布局中显示变量。

不知何故,当主线程工作时,我需要进行另一个活动,然后需要返回主要活动。

理论上,我知道,线程并没有停止。好吧,这对我有好处,我需要随时使用算法改变变量。

但是当我去另一个活动然后返回主线程的活动时,变量正在改变,就像第二次开始的maint线程一样。所有变量都比它们必须的大2倍。当我去另一个活动并返回主要的第三次时,变量变大3倍。 在其他活动中,我只使用此代码;

startActivity(new Intent(n7Activity.this, MainActivity.class));

我想问一下,假设我在主要活动中开始一个线程,然后我用经典的intent方法转到另一个活动,(顺便说一句,我不使用任何暂停方法或smthg。)然后当我返回到主要活动,是第一个线程仍在工作时第二次启动相同的线程吗?

很多。

2 个答案:

答案 0 :(得分:0)

startActivity()创建一个新的Activity实例。我认为应该在另一个Activity中调用finish()来回到主Activity。

答案 1 :(得分:0)

  

当我返回主活动时,同一个线程在第一个线程仍在工作时第二次启动?

似乎是这样。

您创建线程的方法是什么?如果它在onCreate中,则您的线程只会创建一次,因为在活动生命周期中只调用onCreate一次。

尽管如此,我建议您改用TimerHandler。它们具有您所需要的功能。在这种情况下,您无需手动分派线程。

注意活动生命周期也很重要,因此没有线程会为不在前端的活动消耗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;
    }
}