gpt4 book ai didi

android - 如何在结束线程之前确认任务是否完成?

转载 作者:行者123 更新时间:2023-11-29 22:09:12 25 4
gpt4 key购买 nike

我正在为我的应用程序从服务器获取数据。 “getData”函数包含在应用程序的主 Activity 中,位于启动线程中。我遇到的问题是:

如果我在加载应用程序后快速输入新闻或描述,我注意到并非所有信息都已加载(需要保存的最后 2 或 3 个字符串为空)。但是,如果我在显示主菜单后(完成启动线程后)再允许该应用程序几秒钟,则不会出现问题,所有信息都正确存储在手机上。我尝试将启动画面延迟几秒钟,但这并不是一个真正优雅的解决方案,也不是总能奏效。

我的问题是如何在跳转到“finally”之前确保功能已经完成

我没有将数据存储在任何数据库中,只是存储在另一个类的公共(public)静态字符串数组中。

你有我的代码如下:

if(networkAvailable()){
Thread splashTread = new Thread() {
@Override
public void run() {
try {

getData.execute(description_Hyperlinks);
getNews.execute(new String[]{newsJSON_Hyperlink});
getOffers.execute(new String[]{offersJSON_Hyperlink});

for(int i = 0; i<3; i++)
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
finish();
startActivity(new Intent(FlexFormActivity.this, MainMenu.class));
stop();
}
}
};
splashTread.start();

最佳答案

为了使对初始问题的评论中的讨论更具可读性和物理可见性


最好使用 Android 内置支持以 AsyncTask-class 的形式支持异步任务处理.这使您可以“ Hook ”任务,让您有机会对进度的不同阶段使用react。

我们的想法是不要让 getDatagetNewsgetOffers 都扩展 AsyncTask,而是让有一个任务(称为例如“LoadContents”),一个接一个地加载数据、新闻和报价。

然后就可以确定整个初始工作何时完成,这使得以您能想到的任何形式对“任务完成”作出 react 变得容易。


作为一点代码审查,通常永远不需要使用 Thread 类本身,因为 Java 和 Android 提供了许多围绕它的包装器(特别是 Java Executor Framework ),这为了产生更干净和可靠的代码,应该受到青睐。


此外,作为关于“禁用后退按钮”(@Eugen 使用它来确保闪屏保持存在)的一般建议:不要这样做。这不是用户在使用应用程序时所期望的行为。

假设有人不小心打开了一个应用程序,初始加载内容大约需要 10 秒,而且这个过程无法取消。用户将不得不一直等待,然后才离开应用程序而不使用它。

因此,您不应“停用”后退按钮,而应使您的任务(以及应用程序的初始加载)“可取消”。当使用 AsyncTask 时,这已经为您实现了。

关于android - 如何在结束线程之前确认任务是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10058937/

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