【发布时间】:2012-06-12 15:13:49
【问题描述】:
我一直在开发一个安卓程序。该程序的一部分使用套接字连接与 Web 服务交互,发送平均大约 320 kB 的文件。在桌面上运行的代码传输大约需要 1.5 分钟。使用我的安卓手机 (Atrix) 似乎需要大约一个小时。手机连接到wifi,所以我没想到它需要这么长时间。我最初的想法是添加一个 wifi 锁,但它没有任何帮助。
我在异步任务中运行了实际的上传(为了阅读,我将其中的一些设为伪)
@Override
protected void onPreExecute()
{
//Before starting the task show the uploading dialog
uploadingDialog.show();
}
@Override
protected void onPostExecute(final Boolean success) {
//After the task close the dialog
uploadingDialog.dismiss();
}
@Override
protected Boolean doInBackground(String... params) {
//Upload the files in the background
//keep track of upload results
boolean uploaded = true;
boolean temp;
//lock wifi on and stop the program from sleeping
_keepOnStart();
//Upload each file individually
for(int i=0; i <= fileNameList.size()-1; i++){
//this method does the actual writing to the socket/converts
//the file to a byte array etc.
temp = serverConnection.uploadWord(fileNameList.get(i));
if(temp == false) {
uploaded = false;
}
}
_keepOnStop();
return uploaded;
}
private void _keepOnStart() {
if (_powerManagement == null) {
_powerManagement = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
}
if (_wakeLock == null) {
_wakeLock = _powerManagement.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE,
"0 Backup power lock");
}
_wakeLock.acquire();
WifiManager wifiManager = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
_wifiLock = wifiManager.createWifiLock("0 Backup wifi lock");
_wifiLock.acquire();
}
}
private void _keepOnStop() {
if ((_wifiLock != null) && (_wifiLock.isHeld())) {
_wifiLock.release();
}
if ((_wakeLock != null) && (_wakeLock.isHeld())) {
_wakeLock.release();
}
}
在代码的桌面版本上,我只是在计时“serverConnection.uploadWord(fileNameList.get(i));”具有设定的文件名。 该方法本身从文件中获取字节数据,创建一个要发送到服务器的数据包,然后将其发送出去。
我的一些清单权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
我想知道是否有人可以为此提供解释。我的假设是设备正在使用它的数据连接,但同时设备上只允许使用后台数据,并且我看到过去 7 天内没有数据使用。
(非常感谢任何和所有帮助。如果我仍然不清楚,请告诉我。)
【问题讨论】:
-
你看到状态栏中的wifi图标,还是移动网络图标?如果您有权访问服务器日志,请检查 IP 地址 - 假设您的 wifi 涉及 NAT,则 wifi 上的电话在服务器上应该与您的 wifi 上的 PC 在同一时间点访问服务器具有相同的 IP 地址.
-
在状态栏中,我同时显示了 wifi 和 H+。数据库不存储设备的 IP 地址。不幸的是,网络服务编写的日志不起作用。 (或者没有得到更新......)我确实可以访问 /var/logs/messages 虽然那里的某些东西可能会有所帮助。检查它们是否具有相同的 IP 地址是了解手机是否使用 wifi 或数据的好方法。中肯的建议。
-
查看消息日志我看不到任何内容。还有什么想法吗?还是我看错了日志?
-
我有点惊讶你同时拥有两个图标。您可以尝试从设备上的浏览器和 PC 访问这些显示您的 IP 网站之一。
-
我使用的桌面ip:131.202.xxx.xxx - 手机ip显示为:131.202.xxx.xxx
标签: android sockets android-wifi android-internet