Android asynctask,如何传递几个不同的参数来执行方法?

标签 android android-asynctask

我正在尝试将电子邮件作为异步任务发送。但我不知道如何将不同的参数传递给 doInBackground?

我想像这样传递数据:

上下文 ctx, String typeOfEmail , map 数据

如何将它传递给 AsyncTask 类?

private class LongOperation extends AsyncTask<String, Void, String> {
 @Override
        protected String doInBackground(String... params) {
            for (int i = 0; i < 5; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return "Executed";
        }

public boolean sendLogsByEmail(Context ctx, String typeOfEmail , Map<String, String> data) {

感谢您的任何建议。

最佳答案

对于更复杂的参数,您可以添加构造函数:

public LongOperation (Context ctx, String typeOfEmail, Map data) {
  /// here initialize LongOperation class instance fields
}

此外,将 Context 放入 AsyncTask 中的 WeakReference 更安全,因此它看起来像:

WeakReference<Context> ctx;

然后使用:

Context ctxe = ctx.get();
if ( ctxe != null ) {
   // do something with Context
}

这样您就不会引入在配置更改/或正常 Activity 生命周期期间可能发生的引用泄漏。但是由于您的 AsyncTask 是 Activity 类的内部(我从您的代码中推测),因此它已经隐式引用了封闭类 - 这可能是 Activity。

关于Android asynctask,如何传递几个不同的参数来执行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21362146/

相关文章:

Android:如何将 ListView 放入 XML 中?

android - Mockito:无法验证挂起函数是否被调用,因为 Continuation<T> 函数参数在后台不匹配

android - 是否有必要在单独的线程中查找获取位置?

java - 将网络 SQL 结果返回到 Android 中的主 UI 线程

java - 如何延迟页面或 sleep 线程直到下载过程或进度条完成

android - "Reimport All Maven Projects"之后的重复类 R & BuildConfig

android - 什么是冰冻冰柱?

android - Superdry 拾色器无法在 ICS 上正确渲染

java - 我如何根据 protected String doInBackground 方法中 AsyncTask 的结果调用 Toast.makeText()?

android - 如何使用异步任务执行数据库操作