mirror of
https://github.com/nextcloud/android.git
synced 2024-11-27 09:39:25 +03:00
Updated services clean-up; Android 4.3 and 4.4 keep a huge number of threads in other case
This commit is contained in:
parent
936d8466c6
commit
55c9c3a6c6
5 changed files with 59 additions and 39 deletions
|
@ -109,15 +109,31 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
|
|||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
Log_OC.d(TAG, "Creating service");
|
||||
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
||||
HandlerThread thread = new HandlerThread("FileDownloaderThread",
|
||||
Process.THREAD_PRIORITY_BACKGROUND);
|
||||
HandlerThread thread = new HandlerThread("FileDownloaderThread", Process.THREAD_PRIORITY_BACKGROUND);
|
||||
thread.start();
|
||||
mServiceLooper = thread.getLooper();
|
||||
mServiceHandler = new ServiceHandler(mServiceLooper, this);
|
||||
mBinder = new FileDownloaderBinder();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Service clean up
|
||||
*/
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
Log_OC.v(TAG, "Destroying service" );
|
||||
mBinder = null;
|
||||
mServiceHandler = null;
|
||||
mServiceLooper.quit();
|
||||
mServiceLooper = null;
|
||||
mNotificationManager = null;
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Entry point to add one or several files to the queue of downloads.
|
||||
*
|
||||
|
@ -126,6 +142,8 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
|
|||
*/
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
Log_OC.d(TAG, "Starting command with id " + startId);
|
||||
|
||||
if ( !intent.hasExtra(EXTRA_ACCOUNT) ||
|
||||
!intent.hasExtra(EXTRA_FILE)
|
||||
) {
|
||||
|
@ -342,11 +360,10 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
|
|||
Iterator<String> it = requestedDownloads.iterator();
|
||||
while (it.hasNext()) {
|
||||
String next = it.next();
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Handling download file " + next);*/
|
||||
mService.downloadFile(next);
|
||||
}
|
||||
}
|
||||
Log_OC.d(TAG, "Stopping after command with id " + msg.arg1);
|
||||
mService.stopSelf(msg.arg1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -161,7 +161,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
|
|||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
Log_OC.i(TAG, "mPendingUploads size:" + mPendingUploads.size());
|
||||
Log_OC.d(TAG, "Creating service");
|
||||
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
||||
HandlerThread thread = new HandlerThread("FileUploaderThread", Process.THREAD_PRIORITY_BACKGROUND);
|
||||
thread.start();
|
||||
|
@ -170,6 +170,21 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
|
|||
mBinder = new FileUploaderBinder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Service clean up
|
||||
*/
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
Log_OC.v(TAG, "Destroying service" );
|
||||
mBinder = null;
|
||||
mServiceHandler = null;
|
||||
mServiceLooper.quit();
|
||||
mServiceLooper = null;
|
||||
mNotificationManager = null;
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Entry point to add one or several files to the queue of uploads.
|
||||
*
|
||||
|
@ -179,6 +194,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
|
|||
*/
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
Log_OC.d(TAG, "Starting command with id " + startId);
|
||||
|
||||
if (!intent.hasExtra(KEY_ACCOUNT) || !intent.hasExtra(KEY_UPLOAD_TYPE)
|
||||
|| !(intent.hasExtra(KEY_LOCAL_FILE) || intent.hasExtra(KEY_FILE))) {
|
||||
Log_OC.e(TAG, "Not enough information provided in intent");
|
||||
|
@ -467,6 +484,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
|
|||
mService.uploadFile(it.next());
|
||||
}
|
||||
}
|
||||
Log_OC.d(TAG, "Stopping command after id " + msg.arg1);
|
||||
mService.stopSelf(msg.arg1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -440,7 +440,8 @@ public class SynchronizeFolderOperation extends SyncOperation {
|
|||
*/
|
||||
private void startContentSynchronizations(List<SyncOperation> filesToSyncContents, OwnCloudClient client)
|
||||
throws OperationCancelledException {
|
||||
|
||||
|
||||
Log_OC.v(TAG, "Starting content synchronization... ");
|
||||
RemoteOperationResult contentsResult = null;
|
||||
for (SyncOperation op: filesToSyncContents) {
|
||||
if (mCancellationRequested.get()) {
|
||||
|
|
|
@ -144,6 +144,8 @@ public class OperationsService extends Service {
|
|||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
Log_OC.d(TAG, "Creating service");
|
||||
|
||||
/// First worker thread for most of operations
|
||||
HandlerThread thread = new HandlerThread("Operations thread", Process.THREAD_PRIORITY_BACKGROUND);
|
||||
thread.start();
|
||||
|
@ -165,12 +167,12 @@ public class OperationsService extends Service {
|
|||
*/
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
// WIP: for the moment, only SYNC_FOLDER and CANCEL_SYNC_FOLDER is expected here;
|
||||
Log_OC.d(TAG, "Starting command with id " + startId);
|
||||
|
||||
// WIP: for the moment, only SYNC_FOLDER is expected here;
|
||||
// the rest of the operations are requested through the Binder
|
||||
if (ACTION_SYNC_FOLDER.equals(intent.getAction())) {
|
||||
|
||||
/*Log_OC.v("NOW " + TAG + ", thread " + Thread.currentThread().getName(), "Received request to sync folder");*/
|
||||
|
||||
if (!intent.hasExtra(EXTRA_ACCOUNT) || !intent.hasExtra(EXTRA_REMOTE_PATH)) {
|
||||
Log_OC.e(TAG, "Not enough information provided in intent");
|
||||
return START_NOT_STICKY;
|
||||
|
@ -186,10 +188,6 @@ public class OperationsService extends Service {
|
|||
Message msg = mSyncFolderHandler.obtainMessage();
|
||||
msg.arg1 = startId;
|
||||
msg.obj = itemSyncKey;
|
||||
/*Log_OC.v(
|
||||
"NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Sync folder " + remotePath + " added to queue"
|
||||
);*/
|
||||
mSyncFolderHandler.sendMessage(msg);
|
||||
}
|
||||
|
||||
|
@ -204,7 +202,7 @@ public class OperationsService extends Service {
|
|||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
//Log_OC.wtf(TAG, "onDestroy init" );
|
||||
Log_OC.v(TAG, "Destroying service" );
|
||||
// Saving cookies
|
||||
try {
|
||||
OwnCloudClientManagerFactory.getDefaultSingleton().
|
||||
|
@ -221,10 +219,16 @@ public class OperationsService extends Service {
|
|||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//Log_OC.wtf(TAG, "Clear mUndispatchedFinishedOperations" );
|
||||
mUndispatchedFinishedOperations.clear();
|
||||
|
||||
//Log_OC.wtf(TAG, "onDestroy end" );
|
||||
|
||||
mOperationsBinder = null;
|
||||
|
||||
mOperationsHandler.getLooper().quit();
|
||||
mOperationsHandler = null;
|
||||
|
||||
mSyncFolderHandler.getLooper().quit();
|
||||
mSyncFolderHandler = null;
|
||||
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
@ -276,10 +280,6 @@ public class OperationsService extends Service {
|
|||
* @param file A folder in the queue of pending synchronizations
|
||||
*/
|
||||
public void cancel(Account account, OCFile file) {
|
||||
/*Log_OC.v(
|
||||
"NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Received request to cancel folder " + file.getRemotePath()
|
||||
);*/
|
||||
mSyncFolderHandler.cancel(account, file);
|
||||
}
|
||||
|
||||
|
@ -413,6 +413,7 @@ public class OperationsService extends Service {
|
|||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
nextOperation();
|
||||
Log_OC.d(TAG, "Stopping after command with id " + msg.arg1);
|
||||
mService.stopSelf(msg.arg1);
|
||||
}
|
||||
|
||||
|
|
|
@ -86,9 +86,8 @@ class SyncFolderHandler extends Handler {
|
|||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
Pair<Account, String> itemSyncKey = (Pair<Account, String>) msg.obj;
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Handling sync folder " + itemSyncKey.second);*/
|
||||
doOperation(itemSyncKey.first, itemSyncKey.second);
|
||||
Log_OC.d(TAG, "Stopping after command with id " + msg.arg1);
|
||||
mService.stopSelf(msg.arg1);
|
||||
}
|
||||
|
||||
|
@ -98,8 +97,6 @@ class SyncFolderHandler extends Handler {
|
|||
*/
|
||||
private void doOperation(Account account, String remotePath) {
|
||||
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Getting sync folder " + remotePath);*/
|
||||
mCurrentSyncOperation = mPendingOperations.get(account, remotePath);
|
||||
|
||||
if (mCurrentSyncOperation != null) {
|
||||
|
@ -120,8 +117,6 @@ class SyncFolderHandler extends Handler {
|
|||
mOwnCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton().
|
||||
getClientFor(ocAccount, mService);
|
||||
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Executing sync folder " + remotePath);*/
|
||||
result = mCurrentSyncOperation.execute(mOwnCloudClient, mStorageManager);
|
||||
|
||||
} catch (AccountsException e) {
|
||||
|
@ -129,9 +124,6 @@ class SyncFolderHandler extends Handler {
|
|||
} catch (IOException e) {
|
||||
Log_OC.e(TAG, "Error while trying to get authorization", e);
|
||||
} finally {
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Removing payload " + remotePath);*/
|
||||
|
||||
mPendingOperations.removePayload(account, remotePath);
|
||||
|
||||
mService.dispatchResultToOperationListeners(null, mCurrentSyncOperation, result);
|
||||
|
@ -158,26 +150,17 @@ class SyncFolderHandler extends Handler {
|
|||
Log_OC.e(TAG, "Cannot cancel with NULL parameters");
|
||||
return;
|
||||
}
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Removing sync folder " + file.getRemotePath());*/
|
||||
Pair<SynchronizeFolderOperation, String> removeResult =
|
||||
mPendingOperations.remove(account, file.getRemotePath());
|
||||
SynchronizeFolderOperation synchronization = removeResult.first;
|
||||
if (synchronization != null) {
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Canceling returned sync of " + file.getRemotePath());*/
|
||||
synchronization.cancel();
|
||||
} else {
|
||||
// TODO synchronize?
|
||||
if (mCurrentSyncOperation != null && mCurrentAccount != null &&
|
||||
mCurrentSyncOperation.getRemotePath().startsWith(file.getRemotePath()) &&
|
||||
account.name.equals(mCurrentAccount.name)) {
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Canceling current sync as descendant: " + mCurrentSyncOperation.getRemotePath());*/
|
||||
mCurrentSyncOperation.cancel();
|
||||
} else {
|
||||
/*Log_OC.v( "NOW " + TAG + ", thread " + Thread.currentThread().getName(),
|
||||
"Nothing else in cancelation of " + file.getRemotePath());*/
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue