0

现在,当我改变活动时,我的线缝要睡觉什么的。当我回到主要活动时,有两个线程在运行,做同样的事情。我不确定是否是这种情况,但它似乎是平等的。

...
public class MainActivity extends Activity {

public static double cowCount = 195;
public static double income = 0.100;
static boolean twiceCow = false, Threadrunning = false;
...
public void inc() {
    new Thread(new income()).start();
}

class income implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 20;) {
            final int value = i;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            handler.post(new Runnable() {

                @Override
                public void run() {
                    cowCount = cowCount + income;
                    refresh();
                }
            });
        }
    }
}

这就是我的线程的样子。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();
    checkThread();
}

private void checkThread() {
    if (Threadrunning == false)
    inc();
    Threadrunning = true;
}
public void inc() {
    new Thread(new income()).start();
}
...
public void refresh () {
TextView myTextView = (TextView)findViewById(R.id.myText);
myTextView.setText("You Have " + String.valueOf((nf.format(cowCount)) + " Cows!"));
}

我真的不明白我做错了什么。

4

1 回答 1

1

请查看这篇文章:http ://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

将您的活动重新开始视为与配置更改相同的事情。

这种模式,即使用保留的 Fragment 作为线程的容器,并通过回调您的活动来代理 UI 更新,是一种更适合您的模式。

在您的情况下,您的 UI refresh() 只需要一个 TaskCallback,例如 onRefreshCowCount(int cows);

于 2013-10-23T20:20:23.423 回答