手表与 phone 之间的数据同步问题
Issue with syncing data between watch and phone
我开发了一个 Android 应用程序,它可以在智能phone 和智能手表上并行运行。在这两种设备上,(假设)它读取某些传感器数据,处理该数据(计算其平均值),然后存储该结果。手表将此结果发送到 phone,因此所有存储都发生在 phone 上。我使用缓冲区编写器每 5 秒将一个数字写入文本文件。
现在,在从手表到 phone 的每 320 个数据项交换后,我在 phone 上的应用程序被终止,并且我收到 "the name of the app" 不幸的停止消息。我不明白为什么他们在这个时间之后就停下来了?手表上的应用 运行 继续正常运行。但是,我无法存储它的数据,因为它无法与 phone 版本通信,所以每次手表向 phone 发送数字进行存储时,我都会收到此消息 "the app is unfortunately stopped as a message"。该应用程序有一个 activity 具有服务(前台)。
难道是共享的数据量有限制?
手表上的密码:
// Create a data map and put data in it
private void increaseCounter() {
PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/count");
putDataMapReq.getDataMap().putInt(COUNT_KEY, count++); // I add current time here as well
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult =
Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq);
}
phone 上的代码(可能有问题的区域):
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
// DataItem changed
DataItem item = event.getDataItem();
if (item.getUri().getPath().compareTo("/count") == 0) {
DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
updateCount(dataMap.getInt(COUNT_KEY));
}
} else if (event.getType() == DataEvent.TYPE_DELETED) {
// DataItem deleted
}
}
}
您必须将服务与 StartForeground 通知一起使用,以确保应用始终正常运行。
并尝试在凝视时使用 START_STICKY
flag。
更新
您必须释放数据事件的内存:
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
try{
for(DataEvent dataEvent: dataEvents){
if(dataEvent.getType() != DataEvent.TYPE_CHANGED){
continue;
}
////... code
dataEvents.release();
}catch (Exception e){
Log.v("SunshineWatchFace",e.getMessage());
}
}
我开发了一个 Android 应用程序,它可以在智能phone 和智能手表上并行运行。在这两种设备上,(假设)它读取某些传感器数据,处理该数据(计算其平均值),然后存储该结果。手表将此结果发送到 phone,因此所有存储都发生在 phone 上。我使用缓冲区编写器每 5 秒将一个数字写入文本文件。
现在,在从手表到 phone 的每 320 个数据项交换后,我在 phone 上的应用程序被终止,并且我收到 "the name of the app" 不幸的停止消息。我不明白为什么他们在这个时间之后就停下来了?手表上的应用 运行 继续正常运行。但是,我无法存储它的数据,因为它无法与 phone 版本通信,所以每次手表向 phone 发送数字进行存储时,我都会收到此消息 "the app is unfortunately stopped as a message"。该应用程序有一个 activity 具有服务(前台)。
难道是共享的数据量有限制?
手表上的密码:
// Create a data map and put data in it
private void increaseCounter() {
PutDataMapRequest putDataMapReq = PutDataMapRequest.create("/count");
putDataMapReq.getDataMap().putInt(COUNT_KEY, count++); // I add current time here as well
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult =
Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq);
}
phone 上的代码(可能有问题的区域):
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
// DataItem changed
DataItem item = event.getDataItem();
if (item.getUri().getPath().compareTo("/count") == 0) {
DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
updateCount(dataMap.getInt(COUNT_KEY));
}
} else if (event.getType() == DataEvent.TYPE_DELETED) {
// DataItem deleted
}
}
}
您必须将服务与 StartForeground 通知一起使用,以确保应用始终正常运行。
并尝试在凝视时使用 START_STICKY
flag。
更新
您必须释放数据事件的内存:
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
try{
for(DataEvent dataEvent: dataEvents){
if(dataEvent.getType() != DataEvent.TYPE_CHANGED){
continue;
}
////... code
dataEvents.release();
}catch (Exception e){
Log.v("SunshineWatchFace",e.getMessage());
}
}