Android异步任务不会改变用户界面

Posted

技术标签:

【中文标题】Android异步任务不会改变用户界面【英文标题】:Android async task doesn't change ui 【发布时间】:2020-10-03 14:38:29 【问题描述】:

我一直致力于将视频分享到 Instagram 故事。为了下载文件,在下载时创建了一个异步任务并禁用了布局,除了一些控件。在 onPostExcute() 中,我启用了布局并开始通过意图共享活动。尽管在共享/取消共享后,用户界面仍然被禁用。这里是写在客栈onPostExecute()的代码。

@Override
    protected void onPostExecute(String file_url) 
        videoLoading.setVisibility(View.INVISIBLE);

        layout.setEnabled(true);
        Uri uri = Uri.parse(filePath);
        Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
        String shareBody = presenter.getVideoName();
        sharingIntent.setDataAndType(uri, "vide/mp4");
        startActivity(Intent.createChooser(sharingIntent, "Share using"));

【问题讨论】:

查看设置数据并输入行sharingIntent.setDataAndType(uri,"video/mp4"); 我的建议对你有用吗? 【参考方案1】:

您是否正确声明了 AsyncTask 类?在构造函数以及 doInBackground 和 onPostExecute 中使用正确的 Params 数据类型。

如果您只希望 Instagram 快拍来处理您的意图,您可以这样做:

Intent shareIntent = new Intent("com.instagram.share.ADD_TO_STORY");
shareIntent.setDataAndType(fileUri,"video/*");
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

if (shareIntent.resolveActivity(getPackageManager()) != null) 
    startActivity(shareIntent);

来源:Sharing to Stories

(编辑) 差点忘了:不要调用yourAsyncTaskInstance.doInBackground(),否则onPostExecute() 不会运行。 而是致电yourAsyncTaskInstance.execute()。它将允许 AsyncTask 的所有 4 个部分,即 onPreExecute()doInBackground()onProgressUpdate()onPostExecute() 运行。如果你还没有,可以禁用 onPreExecute 中的视图。

【讨论】:

以上是关于Android异步任务不会改变用户界面的主要内容,如果未能解决你的问题,请参考以下文章

在android中链接2个异步任务的正确方法

Android-AnsyncTask异步任务

异步任务(AsyncTask)

Android异步任务机制之AsycTask

转:android异步任务设计思详解(AsyncTask)

Android - 为列表视图填充适配器的异步任务