Sve*_*ver 1 multithreading android
我有一个耗时的任务(迭代文件并将其内容发送到服务器)我想在后台线程中执行,在特定的interwal中(这就是我想使用Handler的原因).
从UI线程我有这样的调用:
LogsManager lm;
lm = new LogsManager(this);
lm.processLogFiles();
Run Code Online (Sandbox Code Playgroud)
在LogsManager课堂上我有以下代码:
public void processLogFiles(){
Handler mHandler = new Handler();
mHandler.postDelayed(logsRunable, 1000);
}
private Runnable logsRunable = new Runnable() {
@Override
public void run() {
File f = new File(Environment.getExternalStorageDirectory()+Constants.LOG_DIR);
File[] logFiles = f.listFiles();
for (int i = 0; i < logFiles.length; i++) {
readLogs(logFiles[i]); // executes some other methods inside
}
}
};
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,这只是Handler调用方法Runnable.不幸的是,它也阻止了我的UI线程.是不是Handler应该开始一个新线程Runnable?我也在我的应用程序的其他部分使用处理程序,它们工作得很好.我做错了吗?