在手表和手机之间同步数据的问题

时间:2016-12-02 13:44:42

标签: android-service listener wear-os android-wear-data-api

我开发了一款兼容智能手机和智能手表的Android应用程序。在两个设备上,(比方说)它读取某些传感器数据,处理该数据(计算其平均值),然后存储该结果。手表将此结果发送到手机,以便所有存储都在手机上进行。我使用缓冲区写入器每5秒将一个数字写入文本文件。

现在每隔320个数据项从手表交换到手机后,我手机上的应用程序就会被杀死,我得到“应用程序的名称”很遗憾地作为消息停止。我无法弄清楚为什么他们会在这段时间之后完全停止?在手表上运行的应用程序继续正常工作。但是,我无法存储其数据,因为它无法与手机版本进行通信,因此每次手表向手机发送号码进行存储时,我都会收到此消息“应用程序很可能会作为消息停止”。该应用程序有一个具有服务(前台)的活动。

是否存在共享数据量的限制?

观看代码:

// 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);
    }

电话代码(可能存在问题的区域):

@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
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您必须使用Service with StartForeground通知,以确保应用程序始终正常工作。

并在盯着时尝试使用START_STICKY flag

<强>更新

你必须释放dataevent的内存:

  @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());
        }
    }