gpt4 book ai didi

android - onDestroy 中 AsyncTask.execute 的含义

转载 作者:行者123 更新时间:2023-12-02 18:25:41 25 4
gpt4 key购买 nike

我在我的 onDestroy 函数中运行此代码:

@Override
protected void onDestroy() {
if (!(null == theUser.glideId)) {
JSONObject req = new JSONObject();
try {
req.put("actionKey", "UserPresenceInactive");
req.put("userId", theUser.userId);
new ServerRequest().execute(req); //Run an AsyncTask
} catch (JSONException e) {
e.printStackTrace();
}
}
super.onDestroy();
}

AsyncTask 中,我向服务器发送一个请求(仅返回 200 响应)。

我的问题是,这样做有什么影响(如果有的话)?

Activity 是否被销毁?如果服务器没有响应,应用程序是否会保持唤醒状态并可能进入 ANR?有什么想法吗?

编辑

我尝试这样做,但得到了 android.os.NetworkOnMainThreadException

    new Runnable() {
@Override
public void run() {
JSONObject req = new JSONObject();
try {
req.put("actionKey", "UserPresenceInactive");
req.put("userId", theUser.userId);
new ServerRequest().execute(req); //Run an AsyncTask
} catch (JSONException e) {
e.printStackTrace();
}
}
}.run();

更新#2

使用 Thread 而不是 Runnable 就成功了!

最佳答案

是的,Activity 被销毁,但 AsyncTask 正在执行其工作(在后台工作)。不会出现任何 ANR,因为您没有在 UI 上执行任何后台操作。如果您在 AsyncTask 完成后更新 UI 上的任何 View ,那么将会出现 NULLPOINTER 异常 AFAIK。但是,在 onDestroy() 中运行 AsyncTask 并不是一个好主意。

关于android - onDestroy 中 AsyncTask.execute 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11243056/

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