【发布时间】:2019-08-02 03:30:36
【问题描述】:
我有以下静态AsyncTask 类:
public static class MyAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
}
@Override
protected String doInBackground(String... params) {
//Do heavy stuff
}
@Override
protected void onPostExecute(String string) {
super.onPostExecute(string);
progressBar.setVisibility(View.GONE);
}
}
我想显示/隐藏progressBar,正如您在这两种方法中看到的那样。问题是我必须将progressBar 设为静态。这样做,我得到:
不要将 Android 上下文类放在静态字段中;这是内存泄漏(也会破坏 Instant Run)
如果我删除留在我的 MyAsyncTask 类前面的静态,我会得到:
此 AsyncTask 类应该是静态的,否则可能会发生泄漏 (MainActivity.MyAsyncTask)
如何解决?
编辑:
private void checkUser() {
uidRef.get().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
User user = document.toObject(User.class);
if (user == null) {
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(url);
}
}
});
}
【问题讨论】:
-
如果您仅从 MainActivity 调用,则 MyAsyncTask 类不需要是静态的。
-
如何将字符串输出发送回主类/活动?
-
@myatmins 我只从
MainActivity中的一个方法创建了一个新对象MyAsyncTask myAsyncTask = new MyAsyncTask();,为什么说它不需要是静态的? -
@amitava 只需在
TextVIew上设置值,就是这样。如何解决? -
请同时显示执行异步任务的代码。
标签: android android-asynctask android-progressbar