Android HTTP Multipart POST - 锁定WiFi并导致手机崩溃

我正在尝试将视频文件发布到我们的服务器并监视它的进度。我按照无法抓取http POST文件上传(Android)的进度中列出的步骤进行了操作,但效果很好,但是对于较大的文件,我的程序会在写入输出插槽时挂起,然后导致我的手机锁定WiFi所以我不能打开/关闭它然后导致它崩溃(在短时间后)。 因此,我试图编写自己的HTTPClient并且它可以正常工作,但也是间歇性的成功,仍然成为上述方法随机崩溃的牺牲品。它似乎只发生在> 5MB的文件上,但我已经死了大约1.3MB,我甚至已经成功传输了一个13MB的文件。它是如此随机和零星的事实令人愤怒,但我确信它有一些原因正在发生。 这是我的连接代码:
socket.connect(new InetSocketAddress(host, port));
socket.setSendBufferSize(1024 * 65);

int bytesSent = 0;
PrintStream out = new PrintStream(socket.getOutputStream());
out.print(headersBuffer);
out.print(bodyBuffer);
bytesSent += headersBuffer.length() + headersBuffer.length();
byte[] bytes = new byte[1024 * 65];
int size;
while ((size = fileStream.read(bytes)) > 0) {
    mListener.transferred(bytesSent);
    Log.i(TAG, "bytes sent: " + bytesSent);
    bytesSent += size;
    out.write(bytes, 0, size);       // Random freezes (/blocking?) on this line
    out.flush();
}

Log.i(TAG, "Made it!");
out.print(lastBoundary);
out.flush();
我已经使用调试器来查看当写入似乎阻塞时它在堆栈中的位置,并且它是OSNetworkSystem.writeSocketImpl()函数。那个功能永远不会回来...... 所以我的下一个想法是 - 如果套接字只是坐在那里,也许我可以打断它并迫使它关闭,所以至少手机没有崩溃,用户可以重试...我在Android上强制关闭套接字在这里(因为它似乎存在一些问题):http://code.google.com/p/android/issues/detail?can = 2& q = 7933& cospecpec = ID%20Type%20Status%20Owner%20Summary%20Stars& ; ID = 7933 基本上我所做的是创建一个监听器线程,该线程查看每500ms传输了多少字节,如果没有更改,请尝试通过以下方式强制关闭套接字:
socket.shutdownOutput();
socket.close();
但是套接字返回它已关闭,一切都按上面所述继续失败。 这是Logcat中事件的一般顺序:
12-21 14:25:26.802  2234  2340 V UploadService: Bytes transferred: 5959800 of: 13191823
12-21 14:25:26.802  2234  2340 V UploadService: Bytes transferred: 5963896 of: 13191823
12-21 14:25:26.802  2234  2340 V UploadService: Bytes transferred: 5967992 of: 13191823
12-21 14:26:00.693  1262  1270 D WifiService: acquireWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@45b48958}
12-21 14:26:11.083  1262  1289 D WifiHW  : 'DRIVER LINKSPEED' command timed out.
12-21 14:26:21.130  1262  1500 D WifiHW  : 'AP_SCAN 2' command timed out.
12-21 14:26:31.177  1262  1500 D WifiHW  : 'SCAN' command timed out.
几分钟后,真正糟糕的东西开始发生,手机崩溃了! 请帮忙!谢谢。 编辑:在3G上工作得很好 - 我将在家尝试,看看它是否有某种路由器问题。但是 - 我怎么能抓住这个问题并防止手机崩溃?     
已邀请:

要回复问题请先登录注册