android - Wearable.DataApi.putDataItem(GoogleApiClient, PutDataRequest) leaks when used in working thread -


i using task repeatedly executed sync data between wearable , handheld. therefore service started starts postdelayed runnable. in run() method putdatarequest created , send via

 wearable.dataapi.putdataitem(googleapiclient, putdatarequest); 

after new run of task schedulead via postdelayed() method.

that works fine, however, line:

 wearable.dataapi.putdataitem(googleapiclient, putdatarequest); 

somehow leaks , therefore after time app crashes. know why? or bug of api?

my code of runnable follows:

  private static class weakrunnable implements runnable{     private weakreference<wearmanagerwearable> weakwearmanager;     private weakreference<hashmap<integer,mysensoreventlisteners>> weaklistenerlist;     private weakreference<handler> weakhandler;     protected weakrunnable(wearmanagerwearable wearmanager, hashmap<integer,mysensoreventlisteners> listenerlist , handler handler ){         weakwearmanager = new weakreference<>(wearmanager);         weaklistenerlist = new weakreference<>(listenerlist);         weakhandler = new weakreference<>(handler);     }      @override     public void run() {         wearmanagerwearable wearmanager = weakwearmanager.get();         googleapiclient googleapiclient = wearmanager.googleapiclient;         hashmap<integer,mysensoreventlisteners> listenerlist = weaklistenerlist.get();         if(wearmanager.isapiconnected()) {             arraylist<datamap> datamaparraylist = new arraylist<datamap>();             (mysensoreventlisteners listener : listenerlist.values()) {                 datamap datamap = new datamap();                 datamap.putstring("name" , listener.getname() );                 datamap.putint("type" , listener.gettype());                 datamap.putfloatarray("data" , listener.getdata());                 datamaparraylist.add(datamap);             }             putdatamaprequest putdatamaprequest = putdatamaprequest.create("/sensordata");             putdatamaprequest.getdatamap().putdatamaparraylist("datamaplist", datamaparraylist);             putdatarequest putdatarequest = putdatamaprequest.asputdatarequest();             //send             wearable.dataapi.putdataitem(googleapiclient, putdatarequest); // line leaks (when commented out no leaks)             log.d("wearable", "data sending");         }          handler handler = weakhandler.get();         handler.postdelayed(this, updatetime);     } } 


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -