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
Post a Comment