我正在尝试将电子邮件作为异步任务发送。但我不知道如何将不同的参数传递给 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/