I've been working on an android program. One portion of this program interacts with a webservice using a socket connection, sending files that on average are about 320 kB. The code ran on a desktop takes about 1.5 minutes to transfer. Using my android phone (Atrix) it seems to be taking about an hour. The phone is connected to wifi so I wasn't expecting it to take such a long time. My initial thought was to add a wifi lock, but it hasn't helped any.
I have the actual upload running in a async task (For reading I've made some of it pseudo)
@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();
}
}
On the desktop version of the code I was just timing "serverConnection.uploadWord(fileNameList.get(i));" with a set file name. The method itself grabs the byte data from the file, creates a packet to send to the server and then sends it out.
Some of my manifest permissions:
<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" />
I'm wondering if anyone can provide an explaination for this. My assumption is that the device is using it's data connection, but at the same time only background data is allowed on the device, and I see no data use in the last 7 days.
(any and all help is much appreciated. If I'm unclear in anyway please let me know.)