gpt4 book ai didi

java - 避免线程在更改 Activity 时重新启动

转载 作者:行者123 更新时间:2023-12-01 13:57:33 26 4
gpt4 key购买 nike

现在,当我更改 Activity 时,我的线程似乎会进入休眠状态或发生其他情况。当我回到主要 Activity 时,有两个线程正在运行,做同样的事情。我不确定是否是这样,但看起来是平等的。

...
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!"));
}

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

最佳答案

请查看此帖子:http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

将您的 Activity 重新启动视为与配置更改相同的事情。

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

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

关于java - 避免线程在更改 Activity 时重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com