我的数据成功来自我通过广播接收器发送到服务的传感器。我现在想把它传递给一个线程,将它附加到一个文件中。
我遵循this回答中提供的大纲。
并且已经找到了如何附加到文件here。
我能解决的问题是如何在文件中保持文件打开,我不想每次收到消息时都要关闭它并重新打开文件“'消息循环。我的代码大致遵循我发现的here(大约在网页的1/3处)
具体问题如下:
saveDataToFile(String data)
写在线程类之外,但是由消息处理程序looper调用,这是否意味着它在线程内部运行,即使该方法是在线程外写的?此处代码(请注意,我并未复制所有与服务绑定相关的代码:
public class SaveDataService extends Service {
private boolean isBound;
private final IBinder myBinder = new SaveDataServiceBinder();
private SaveDataThread mySaveDataThread;
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("save_data")) {
String data = intent.getStringExtra("data");
if (mySaveDataThread.myHandler != null) {
Message msg = mySaveDataThread.myHandler.obtainMessage(0);
msg.obj = data;
mySaveDataThread.myHandler.sendMessage(msg);
}
}
}
};
private class SaveDataThread extends Thread {
public Handler myHandler;
@Override
public void run() {
Looper.prepare();
myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
String data = (String) msg.obj;
saveDataToFile(data);
}
}
};
Looper.loop();
}
}
private void saveDataToFile(String data) {
//save data
}
@Override
public void onCreate() {
super.onCreate();
IntentFilter filter = new IntentFilter();
filter.addAction("save_data");
registerReceiver(receiver, filter);
mySaveDataThread = new SaveDataThread();
mySaveDataThread.start();
}
@Override
public void onDestroy() {
unregisterReceiver(receiver);
mySaveDataThread.myHandler.getLooper().quit();
}
}
答案 0 :(得分:1)
只需将打开的文件输出流保存在服务或线程的成员变量中。