-1
我重构我的线程,以避免内存泄漏,我得到了有关处理程序和startActivityForResult 2个误差从线程中被调用(处理Google云端硬盘)Android的 - 不能让一个静态引用非静态方法
我有我的DownloadActivity:
公共类DownloadActivity延伸活动{ .... 私人无效getFolderId(){ getFolderIdThread =新getFolderIdThread(); getFolderIdThread.start(); }
private static class GetFolderIdThread extends Thread {
private Boolean mRunning = false;
@Override
public void run() {
mRunning = true;
fResultList = new ArrayList<File>();
Files f1 = mService.files();
Files.List request = null;
aFolderId = null;
do {
try {
request = f1.list();
String aQuery = "'root' in parents and mimeType='application/vnd.google-apps.folder' and title='"+ aFolderName + "'";
request.setQ(aQuery);
FileList fileList = request.execute();
fResultList.addAll(fileList.getItems());
request.setPageToken(fileList.getNextPageToken());
} catch (UserRecoverableAuthIOException e) {
startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); <= THIS RAISES THE ERROR
} catch (IOException e) {
e.printStackTrace();
if (request != null){
request.setPageToken(null);
}
}
} while (request.getPageToken() !=null && request.getPageToken().length() > 0);
if (fResultList.size() == 0) {
Log.d(TAG, "cannot find the training folder at root level");
Message msg = handler.obtainMessage(); <= THIS RAISES THE ERROR
Bundle bundle = new Bundle();
bundle.putInt("msgKey", DownloadActivity.NO_TRAININGS_FOLDER);
msg.setData(bundle);
handler.sendMessage(msg); <= THIS RAISES THE ERROR
} else {
File folder = fResultList.get(0);
aFolderId = folder.getId();
getFolderContents(); <= THIS RAISES THE ERROR
}
}
public void close() {
mRunning = false;
}
}
我已经在我的活动
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
...
}
}
和onActivityResult定义的处理程序
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
switch (requestCode) {
case REQUEST_ACCOUNT_PICKER:
....
break;
}
}
我有哪些选择绕过这个错误?
我试图写我的线程为静态,以避免任何显式引用封闭类,所以活动实例不会泄漏时,配置更改...我在我的onDestroy()方法中添加一个thread.close() (Activity class)...我需要再读一些关于Runnable类的文档...以更好地理解如何泄漏 – erwin
找到了一个非常好的帖子,如何安全地处理我的线程和避免memoty泄漏.. http: //www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html – erwin