微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ANR 向可穿戴设备发送大文件

如何解决ANR 向可穿戴设备发送大文件

考虑到使用 ChannelClient 类将文件从手机发送到可穿戴设备的最少文档,我已经开始使用它了。但是,我在发送较大的文件时收到 ANR 错误。我正在使用 Foreground Service 来处理我认为用于长时间运行任务的上传。奇怪的是 ANR 发生在用户选择要上传文件Activity 中。

服务

public class UploadFile extends Service {

    @Override
    public int onStartCommand(Intent intent,int flags,int startId) {
        createForegroundNotification();
        
        Uri fileUri = Uri.parse(intent.getExtras().getString("file"));
        String fileName = getFileName(fileUri);

        List<Node> nodes = Utilities.getNodesAsync();

        for (Node node : nodes) {
          ChannelClient channelClient = Wearable.getChannelClient(context);

                channelClient.openChannel(node.getId(),fileName).addOnSuccessListener(channel -> {

                Task<OutputStream> outputStreamTask = channelClient.getoutputStream(channel);

                outputStreamTask.addOnSuccessListener(outputStream -> {

                    try {
                        InputStream inputStream = context.getContentResolver().openInputStream(fileUri);
                        ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();

                        byte[] buffer = new byte[1024];

                        int len;
                        while ((len = inputStream.read(buffer)) > 0)
                            byteBuffer.write(buffer,len);

                        outputStream.write(byteBuffer.toByteArray());
                        outputStream.flush();
                        outputStream.close();
                        inputStream.close();
                    } catch (Exception e) {
                        e.printstacktrace();
                    } finally {
                        stopForeground(true);
                    }

                });
            });
        }   
    }
}

用户添加活动:

mFileUploadButton.setonClickListener(view -> mFileUpload.launch("*/*"));


final ActivityResultLauncher<String> mFileUpload = registerForActivityResult(new ActivityResultContracts.GetContent(),uri -> {

        final Intent serviceIntent = new Intent(this,UploadFile.class);
        final Bundle extrasService = new Bundle();
        extrasService.putString("file",uri.toString());
        serviceIntent.putExtras(extrasService);

        ContextCompat.startForegroundService(this,serviceIntent);

    });

错误

2021-07-26 09:26:56.391 1558-13178/? E/ActivityManager: ANR in com.my.app (com.my.app/.Activities.UserAddActivity)
PID: 13090
Reason: Input dispatching timed out (1c8d463 com.my.app/com.my.app.Activities.UserAddActivity (server) is not responding. Waited 5003ms for FocusEvent(hasFocus=false))
Parent: com.my.app/.Activities.UserAddActivity

ANR 只发生在大文件上。我正在测试的是 63MB。奇怪的是,文件确实传输到了​​可穿戴设备,但手机在完成之前就抛出了 ANR。

我什至尝试将代码放入 Service 中的异步任务中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?