gpt4 book ai didi

java - 使用不同的线程自动更新 UI

转载 作者:行者123 更新时间:2023-12-02 02:23:41 26 4
gpt4 key购买 nike

我有一个 Android 应用程序,它不断自动更新来自应用程序 SQLite 的数据列表,其中 ArrayAdapter 用于处理数据,因此为此我从 Acitivity 的 onCreate 方法创建了另一个线程或处理程序,并且在它的代码内部有一个连续的循环用于更新然后等待(或使线程 hibernate 一会儿,例如/10秒),涉及两个问题:1-只有UI线程可以触摸它的 View (尽管我只触摸了ArrayAdapter,如果它算作一个 View 的话)。2-一旦另一个线程开始运行,UI线程似乎卡在其中,甚至不会更新第一个UI更新(完全白色)。autoUpdate() 方法的代码:(在 UI onCreate 方法的最后一行调用):

public void startAutoUpdateLogData(final int milliseconds){
continueAutoUpdate = true;
new Thread(){
@Override
public void run() {
while(continueAutoUpdate){
try{
Log.v("updating..", "");
updateLogFromDatabase();
Thread.sleep(milliseconds);
}catch(Exception e){
e.printStackTrace();
}
}
}
}.start();
}

或者:

public void startAutoUpdateLogData2(final int milliseconds){
continueAutoUpdate = true;
runOnUiThread(new Runnable() {
@Override
public void run() {
while(continueAutoUpdate){
try{
Log.e("updating...", "");
updateLogFromDatabase();
Thread.sleep(milliseconds);
}catch(Exception e){
e.printStackTrace();
}
}
}
});
}

或者

public void startAutoUpdateLogData3(final int milliseconds){
continueAutoUpdate = true;
final Handler handler = new Handler();

runOnUiThread(new Runnable() {
@Override
public void run() {
while(continueAutoUpdate){
try{
handler.postDelayed(new Runnable(){
public void run(){
Log.e("updating...", "");
updateLogFromDatabase();
}
}, milliseconds);
}catch(Exception e){
e.printStackTrace();
}
}
}
});
}

这些都不起作用。

最佳答案

您可以采取多种方式。但这将是更接近您所做的解决方案。

private void runThread() {

new Thread() {
public void run() {
while (continueAutoUpdate) {
try {
handler.postDelayed(new Runnable(){
public void run(){
Log.e("updating...", "");
updateLogFromDatabase();
}
}, milliseconds);
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}

关于java - 使用不同的线程自动更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096349/

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