我有一个活动,它启动电子邮件意图,传递一个指向本地文件的Uri对象的数组列表。这适用于存在少量文件的情况,例如但是,当我有1000多个文件(总大小为14 mb)时,活动会挂起(预计很多i / o),但它有时会无限期挂起或者当它确实返回意图时没有发射。
下面的代码(由AsyncTask调用)创建Uri的数组列表并启动Email意图:
private Intent createEmailAndSend(List<FilePath> paths) {
Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
emailIntent.setType("message/rfc822");
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
ArrayList<Uri> fileUriList = new ArrayList<>();
for (FilePath filePath : paths) {
File file = new File(filePath.getPath());
fileUriList.add(Uri.fromFile(file));
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, fileUriList);
startActivity(intent);
}
测试:
有谁知道我做错了什么?
答案 0 :(得分:1)
1000多个文件作为单个邮件的附件?它必须挂起。我看到总尺寸不是太大但附件数量仍然很大。
我能想到的两个解决方案:
答案 1 :(得分:1)
编辑1:在我被告知使用AsyncTask之后。
AsyncTask指南中写道:
理想情况下,AsyncTasks应该用于短时间操作(几秒钟) 最多。)如果你需要保持线程长时间运行 时间,强烈建议您使用提供的各种API java.util.concurrent包,例如Executor,ThreadPoolExecutor 和FutureTask。
显然你的代码运行的时间超过几秒,所以应该使用上面的代码。我使用this教程来学习FutureTask。 试试这个,让我们发布。
答案 2 :(得分:0)
我认为这对其他人有用。我找到的解决方案是将文件压缩成一个zip文件,然后将其附加到电子邮件中。否则它将崩溃而没有报告错误。
HTH