2
我正在创建一个应用程序,它将接收来自多个设备的传感器数据,并且需要能够记录它。我创建了自己的自定义线程,它将根据我的UI线程的请求打开,记录和关闭文件。不过,它在录制时似乎会减慢我的用户界面。这可能是由于每条消息的开销?有没有更好的方法来完成这样的长期任务?Android:长时间运行的文件记录线程减慢UI
public class FileThread extends Thread {
public static final int MSG_OPEN_FILE = 1000,
MSG_WRITE_FILE = 2000,
MSG_CLOSE_FILE = 3000;
public Handler handler;
private OutputStream fileStream;
@Override
public void run() {
Looper.prepare();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case MSG_OPEN_FILE: {
final String fileName = (String)msg.obj;
final File aclSensorDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "ACLSensor");
if(!aclSensorDirectory.exists()) {
if(!aclSensorDirectory.mkdir()) {
Log.e("FileThread", "Couldn't make directory!");
}
}
final File file = new File(aclSensorDirectory, fileName);
try {
fileStream = new BufferedOutputStream(new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
break;
}
case MSG_WRITE_FILE: {
final String data = (String)msg.obj;
try {
fileStream.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
break;
}
case MSG_CLOSE_FILE: {
try {
fileStream.close();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
};
Looper.loop();
}
}
使用Traceview并找出问题的真正所在。 – CommonsWare 2014-09-23 23:46:42