【问题标题】:How to copy files without slowing down my app?如何在不减慢我的应用程序速度的情况下复制文件?
【发布时间】:2014-08-22 09:16:59
【问题描述】:

我的资产中有一堆小文件,需要在我的应用程序第一次启动时复制到 SD 卡中。我从here 获得的复制代码放在 IntentService 中就像一个魅力。但是,当我开始复制许多小文件时,整个应用程序变得异常缓慢(顺便说一句,我不太清楚为什么),这对于第一次启动的用户来说是一种非常糟糕的体验。

当我意识到当时其他应用程序运行正常时,我尝试为该服务启动一个子进程,但没有成功,因为据我所知,我无法从另一个进程访问我的资产。有人知道怎么做吗

a) 在不阻止我的应用的情况下复制文件

b) 从私有进程(Manifest 中的 process=":myOtherProcess")访问我的资产

c) 以完全不同的方式解决问题

编辑: 为了更清楚地说明这一点:复制已经发生在一个单独的线程中(由 IntentService 自动启动)。问题不在于将复制任务分开,而是在专用线程中的复制会以某种方式影响应用程序的其余部分(例如,阻塞许多特定于应用程序的资源?)而不是其他应用程序(因此它不会阻塞整个 CPU 或某些东西)

编辑2: 问题解决了,事实证明,没有真正的问题。请参阅下面的答案。

【问题讨论】:

  • 使用 asynctask 复制哪个 nver 影响应用程序

标签: android performance file-io process assets


【解决方案1】:

我建议你创建一个单独的线程来完成这项工作。或者,更简单,AsyncTask!

【讨论】:

  • 对不起,没有帮助,并不是说 AsyncTask 似乎使 UI 比 IntentService 还要慢。由于两者都创建了一个单独的线程,这对我来说并不令人惊讶。我想减速一定与文件系统访问有关,但我无法理解它。由于应用程序的所有活动都受到影响,因此其他活动中肯定没有代码问题。
  • 请注意,Android 服务不是线程!它本身并不是一种脱离主线程工作的方法,就像文档说的那样:developer.android.com/reference/android/app/Service.html。是的,文件系统访问可能会很慢。你的设备是什么?
  • 请注意,Android IntentService 与 Android Service 并不完全相同;)Docs。如上所述,“IntentService 是按需处理异步请求(表示为 Intent)的服务的基类。客户端通过 startService(Intent) 调用发送请求;服务根据需要启动,依次处理每个 Intent 使用工作线程,并在工作结束时自行停止。"
【解决方案2】:

很抱歉,事实证明您实际上可以在子进程中使用资产。我不知道为什么我第一次尝试它时它不起作用。所以我的问题的答案实际上是(b)。为 Intentservice 创建一个子进程,通过 getApplicationContext().getAssets() 访问资产,然后就可以了。它现在运行速度令人满意。感谢您尝试提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多