FolderMessageList performance improvement from debauchedsloth++ (Partial application of his patch from Issue 285)

This commit is contained in:
Jesse Vincent 2009-05-03 04:39:13 +00:00
parent 92a8c174cc
commit f2fa5ae2f6
1 changed files with 57 additions and 43 deletions

View File

@ -61,6 +61,14 @@ import com.android.email.mail.store.LocalStore;
import com.android.email.mail.store.LocalStore.LocalFolder;
import com.android.email.mail.store.LocalStore.LocalMessage;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* FolderMessageList is the primary user interface for the program. This
* Activity shows a two level list of the Account's folders and each folder's
@ -160,6 +168,8 @@ public class FolderMessageList extends ExpandableListActivity
private boolean sortAscending = true;
private boolean sortDateAscending = false;
private static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1, 120000L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());
private DateFormat getDateFormat()
{
if (dateFormat == null)
@ -434,7 +444,7 @@ public class FolderMessageList extends ExpandableListActivity
class FolderUpdateWorker implements Runnable
{
String mFolder;
FolderInfoHolder mHolder;
boolean mSynchronizeRemote;
/**
@ -444,9 +454,10 @@ public class FolderMessageList extends ExpandableListActivity
* @param folder
* @param synchronizeRemote
*/
public FolderUpdateWorker(String folder, boolean synchronizeRemote)
public FolderUpdateWorker(FolderInfoHolder folder, boolean synchronizeRemote)
{
mFolder = folder;
mFolder = folder.name;
mHolder = folder;
mSynchronizeRemote = synchronizeRemote;
}
@ -454,8 +465,13 @@ public class FolderMessageList extends ExpandableListActivity
{
// Lower our priority
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Email - UpdateWorker");
wakeLock.setReferenceCounted(false);
wakeLock.acquire(Email.WAKE_LOCK_TIMEOUT);
// Synchronously load the list of local messages
try
{
try
{
Store localStore = Store.getInstance(mAccount.getLocalStoreUri(),
@ -484,6 +500,12 @@ public class FolderMessageList extends ExpandableListActivity
mAccount, mFolder, mAdapter.mListener);
}
}
finally
{
wakeLock.release();
}
}
}
public static void actionHandleAccount(Context context, Account account,
@ -689,12 +711,10 @@ public class FolderMessageList extends ExpandableListActivity
mListView.setSelectionFromTop(position, 0);
}
final FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getGroup(groupPosition);
final FolderInfoHolder folder = (FolderInfoHolder)
mAdapter.getGroup(groupPosition);
if (folder.messages.size() == 0 || folder.needsRefresh)
{
folder.needsRefresh = false;
new Thread(new FolderUpdateWorker(folder.name, false)).start();
}
threadPool.execute(new FolderUpdateWorker(folder, false));
}
@ -1052,6 +1072,7 @@ public class FolderMessageList extends ExpandableListActivity
holder.message.getFolder().getName(), holder.message, folder.name, null);
}
private void onReply(MessageInfoHolder holder)
{
MessageCompose.actionReply(this, mAccount, holder.message, false);
@ -1320,7 +1341,7 @@ public class FolderMessageList extends ExpandableListActivity
break;
case R.id.check_mail:
Log.i(Email.LOG_TAG, "refresh folder " + folder.name);
new Thread(new FolderUpdateWorker(folder.name, true)).start();
threadPool.execute(new FolderUpdateWorker(folder, true));
break;
case R.id.folder_settings:
Log.i(Email.LOG_TAG, "edit folder settings for " + folder.name);
@ -1334,7 +1355,6 @@ public class FolderMessageList extends ExpandableListActivity
Log.i(Email.LOG_TAG, "mark all unread messages as read " + folder.name);
onMarkAllAsRead(mAccount, folder);
break;
}
}
@ -1400,9 +1420,7 @@ public class FolderMessageList extends ExpandableListActivity
.getGroup(groupPosition);
if (!folder.name.equals(mAccount.getTrashFolderName()))
{
menu.findItem(R.id.empty_trash).setVisible(false);
}
if (folder.outbox)
{
menu.findItem(R.id.check_mail).setVisible(false);
@ -1614,13 +1632,9 @@ public class FolderMessageList extends ExpandableListActivity
*/
for (int i = 0, count = getGroupCount(); i < count; i++)
{
final FolderInfoHolder folder = (FolderInfoHolder) mAdapter.getGroup(i);
if(mListView.isGroupExpanded(i))
{
final FolderInfoHolder folder = (FolderInfoHolder) mAdapter
.getGroup(i);
new Thread(new FolderUpdateWorker(folder.name, mRefreshRemote))
.start();
}
threadPool.execute(new FolderUpdateWorker(folder, mRefreshRemote));
}
mRefreshRemote = false;
}