android - 启动通用 Activity 并等待 AsyncTask 完成

标签 android android-asynctask

从 Activity X 开始,当某个事件发生时,Activity A 启动(是一个进度条),并且此 Activity A 启动一个 AsyncTask,完成后关闭 Activity A 并返回到 Activity X。此事件不能在很多不同的 Activity 中执行,并且 AsyncTask 执行的代码可能不同(并且通常必须从 Activity X 访问很多变量)。

所以我只想有一个 Activity A,但让它在 AsyncTask 内执行不同的代码 fragment 。这里的问题是我无法使用自定义构造函数构造 Activity A(例如传递将在 AsyncTask 中执行的可运行对象)。

我尝试从 Activity X 中将代码作为 Parcelable 传递,但这迫使我每次要调用 Activity A 时都必须编写大量无用且重复的 Parcelable 相关代码。

有什么技巧可以做到这一点吗?我没有使用 Java 8,因此 lambda 不是一个选项。

提前谢谢您。

最佳答案

当使用进度条提示用户等待您执行某项操作时,请尝试启动包含进度条的对话框而不是另一个 Activity。这样你就能做(我认为的)你想做的事。然后,当任务完成时关闭对话框,您将不需要在“Activity ”之间来回移动大量数据。

例如:

your_dialog.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myProgressDialog"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_trans"
android:gravity="center">

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyle"
    android:layout_width="36dp"
    android:layout_height="36dp"
    android:indeterminate="true" />

如果需要,请为对话框使用自定义样式,添加类似的内容到 styles.xml

<style name="myCustomDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@color/my_color</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

然后,在 Activity X 中调用对话框

Dialog d = new Dialog(this, R.style.myCustomDialog);
d.setContentView(R.layout.your_dialog);
d.show();
AsyncTask task.execute(); //Execute your task

当任务结束时,不要忘记关闭对话框,或者设计布局以让用户控制(如果可能)任务以取消任务并在需要时关闭对话框。

希望有帮助。

关于android - 启动通用 Activity 并等待 AsyncTask 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37630413/

相关文章:

java - 仅在 Activity 未显示时显示通知

android - 在 Android AsyncTask 中读取文件

javascript - 如何使用phonegap为移动应用程序创建安全页面

android - com.google.firebase.iid.FirebaseInstanceIdReceiver 是否需要导出?

java - 创建了 Adview,现在怎么办?

android - Genymotion 仍在等待 "Booting"

Android 在运行时反转位图

android - 致命异常 : AsyncTask #1, java.lang.RuntimeException:执行 doInBackground() 时发生错误

android - 在自动完成中使用 AsyncTask 的最佳实践?

java - 我是否在异步任务中实现警报对话框?