我正在创建一个应用程序,它将从多个设备接收传感器数据,并且需要能够记录它。我创建了自己的自定义线程,它将根据我的UI线程的请求打开,记录和关闭文件。但是,录制时似乎会减慢我的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();
}
}
答案 0 :(得分:0)
我认为最好使用AsyncTask并为每条消息触发任务,而不是一直运行的线程。
没有必要保留一个长时间运行的线程,大部分时间都可能处于空闲状态。