Siv*_*a K 1 android download out-of-memory
在我的应用程序中,我试图按下单击按钮下载一些视频.我在通知区域显示了一个进度条,我已经在这里询问了一个问题(这是在赏金之下)
现在要解决我的问题,我将代码更改为如下,当单击第一个按钮时,它会在类通知中启动进度条上传服务扩展IntentService并显示进度条
当单击第二个按钮时,它会尝试通过类的上传服务启动另一个进度条上传.上传服务扩展了IntentService,但是应用程序立即崩溃并显示以下错误,如下所示
E/dalvikvm-heap( 2325): Out of memory on a 10171204-byte allocation.
E/AndroidRuntime( 2325): Uncaught handler: thread IntentService[UploadService2] exiting due to uncaught exception
E/AndroidRuntime( 2325): java.lang.OutOfMemoryError
E/AndroidRuntime( 2325): at uk.me.hardill.android.notification.UploadService2$1.run(UploadService2.java:93)
E/AndroidRuntime( 2325): at uk.me.hardill.android.notification.UploadService2.onHandleIntent(UploadService2.java:134)
E/AndroidRuntime( 2325): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:30)
E/AndroidRuntime( 2325): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 2325): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 2325): at android.os.HandlerThread.run(HandlerThread.java:60)
Run Code Online (Sandbox Code Playgroud)
我的UploadServices类在这里
鉴于您只在这段代码中使用缓冲区:
byte[] buffer = new byte[10171188];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1)
{
fos.write(buffer, 0, len1);
}
Run Code Online (Sandbox Code Playgroud)
答案似乎很简单:使用较小的缓冲区.即使在桌面上,我通常会创建一个大约32K的缓冲区 - 在移动设备上创建一个10M缓冲区是一个非常糟糕的主意IMO.
即使你可以填充那个缓冲区,也没有必要有一个那么大的 - 当你实际上正在获取一个网络资源时,即使只有1%的缓冲区将被填充在一次读取中也是非常不可能的.
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |