Repo of the Open Source Android library : RoboSpice. RoboSpice is a modular android library that makes writing asynchronous long running tasks easy. It is specialized in network requests, supports caching and offers REST requests out-of-the box using extension modules.

Related tags

Networking robospice
Overview

Overview Build Status on Travis: Maven Central

We froze RS last week, the library is not maintained anymore. Personnally, I now always use a mix of retrofit and Rx instead, RS has sailed a long way home and yes, the latest constraints in android O don't make it easy for RS at all, it's probably the last nail in its coffin. @stephanenicolas

Thx to all RS users for your warm support, it's been a pleasure to ofer this library to the community. Thx to @rciovati too for his important contributions to RS !


RoboSpice is a modular android library that makes writing asynchronous network requests easy !

To learn more about RoboSpice in 30 seconds, try [this infographics] (https://raw.github.com/stephanenicolas/robospice/master/gfx/RoboSpice-InfoGraphics.png).

If you want to start using RoboSpice right now, jump to the Wiki or the samples.

The Wiki has a fully detailed section to quickly setup you up whether you use Gradle, Maven or ant/eclipse.

Main features of RoboSpice

  • supports Android starting from SDK version 8 (Froyo / 2.2.x)
  • executes network requests asynchronously (in a background AndroidService)
  • supports REST out of the box (using Spring Android or Google Http Client or Retrofit).
  • is strongly typed ! You query webservices using POJOs as parameters and you get POJOs as request results.
  • enforces no constraints neither on POJOs used for requests nor on Activity classes you use in your projects
  • caches results in Json with both Jackson or Jackson2 or Gson, or Xml, or flat text files, or binary files, even using ORM Lite (still in beta)
  • notifies your activities (or any other context) of the result of the network request with respect to their lifecycles.
  • notifies your activities (or any other context) on the UI Thread
  • no memory leaks at all, like Android Loaders, unlike Android AsyncTasks
  • uses a simple but robust exception handling model
  • supports multi-threading of request executions
  • is stable, efficient and designed to respect Android philosophy
  • supports request cancelling, request priorization and requests aggregation
  • supports aggregation of different web services
  • is a full featured replacement for long �running AsyncTasks even if they are not related to networking.
  • is open source ;)
  • and tested (more than 200 tests)

RoboSpice is under Quality control on Sonar's Nemo instance. Thanks to Sonar Source.

To learn more about RoboSpice

To learn more, look at the presentation slides we created for DroidCon UK 2012, they are available in the download section.

A few links :

Example code & demo

The RoboSpice team proposes a lot of sample applications in their own GitHub repo.

We also propose a few demo :

A project initiated by Octo Technology

Octo Technology logo

RoboSpice has been incubated at Octo Technology, a french company based in Paris, focused on software design and quality. It offers its employees to work part time on Research & Development projects. RoboSpice was one of them.

RoboSpice is the news

RoboSpice has been featured in

RoboSpice has been presented at :

RoboSpice video at DroidConLondon

Robospice presentation by David Stemmer

License

Copyright (C) 2012 Octo Technology (http://www.octo.com)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Alternatives to RoboSpice

Projects related to RoboSpice

  • Blandware Android AtLeap Core is a library accelerating development. It contains universal Content Provider (for SQLite, ORMLite), Drawer, Account Authenticator, etc. AtLeap Sample is a good example of RoboSpice, Retrofit, ORMLite, Picasso integration.
  • SpiceAnnotations : using RoboSpice and Android Annotations by Daniel Dekanski. Also read his blog post.
Comments
  • ConcurrentModificationException in RequestProcessor

    ConcurrentModificationException in RequestProcessor

    using a SpiceService with 4 theads some times i get a ConcurrentModificationException java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:796) at java.util.HashMap$KeyIterator.next(HashMap.java:823) at com.octo.android.robospice.request.RequestProcessor$ResultRunnable.run(RequestProcessor.java:451) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3683) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) at dalvik.system.NativeStart.main(Native Method)

    Can robospice use ConcurrentHashMap?

    opened by ffgiraldez 58
  • Notification with Android 4.3

    Notification with Android 4.3

    Hi,

    Since Android 4.3, a default notification is shown when using Robospice. According to Adam Powell, the fake notification with startForeground() is not working anymore and the framework displays one :

    https://plus.google.com/u/0/115055848034306421648/posts/9XvjLxG1xST

    Is-it possible to find a way to remove it ? Because my users are asking me why they have this notification.

    Thanks !

    bug enhancement next release 3 - Done 
    opened by g123k 32
  • App crash

    App crash "Bad notification for startForeground"

    I'm using 1.4.8 and when I go from a fragment to a new one (both trigger a request in their onStart() method) while request is in progress, I got a RemoteServiceException:

    Here's the stack trace with fragment's lifecycle

    sans titre 4

    If it helps, Android version is 4.0.4

    bug question next release 
    opened by mcastets 26
  • Does SpiceManager drop execute calls made before start ?

    Does SpiceManager drop execute calls made before start ?

    Hi,

    I am making a request via SpiceManager.execute() inside an Activitys onCreate() and am starting and stopping the SpiceManager in onStart and onStop. I am seeing 1 / ~10-20 times it will not run the SpiceRequest at all.

    This is not a big issue for me as I will move the execute call into onStart but Im not sure if this is a bug...?

    bug question next release 
    opened by doridori 23
  • NullPointerException on SpiceService.addSpiceServiceListener()

    NullPointerException on SpiceService.addSpiceServiceListener()

    I'm using RoboSpice 1.4.9 along Retrofit. I've several reports of this crash from the Release .apk but I've been unable to reproduce it on debug so far. Here's the Stacktrace. Thanks!

    java.lang.NullPointerException
    at com.octo.android.robospice.SpiceService.addSpiceServiceListener(SpiceService.java:387)
    at com.octo.android.robospice.SpiceManager$SpiceServiceConnection.onServiceConnected(SpiceManager.java:1073)
    at android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1247)
    at android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection.run(ActivityThread.java:1264)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4627)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
    
    bug invalid 
    opened by nakardo 22
  • SpiceManager.getDateOfDataInCache doesn't work as expected

    SpiceManager.getDateOfDataInCache doesn't work as expected

    This post follows on from this issue

    That's about getDateOfDataInCache

    • If there's no such cache key or after using removeDataFromCache(clazz, cacheKey), getDateOfDataInCache(clazz, cacheKey).get() returns Thu Jan 01 01:00:00 UTC+01:00 1970 instead of the expected null.
    • And also something very weird... After locking my phone screen and unlocking it, (going through the onStop() and onStart() process) I got a NullPointerException on running getDateOfDataInCache(clazz, cacheKey) Please take note that's happened prior to calling get()
    bug 2 - Working 
    opened by mcastets 21
  • Memory leak fix

    Memory leak fix

    Hello! I started to use RoboSpice library in my project and I liked its design and usability very much. But I have faced a problem: when I execute many similar requests, I have a great memory leak after them. After investigating this problem I have found that memory leak is in mapPendingRequestToRequestListener field in SpiceManager class. Some listeners are not removed from this map. It is so because this field is IdentityHashMap, but remove method is called only for one of aggregated requests. So I changed code a little to remove all listeners after execution.

    opened by seva-ask 20
  • CacheKey string is not sanitized

    CacheKey string is not sanitized

    There is no sanitization of cacheKey string when is used as filename: using special chars, the filename may be invalid, so no cache is written on disk.

    next release 2 - Working 
    opened by gcacace 20
  • Rank NOOB wants to use RoboSpice and needs help

    Rank NOOB wants to use RoboSpice and needs help

    Hello,

    I am a long time C# developer and trying to get my feet wet with android and java. I have written a workflow web service and published it. Calling the service from .NET architectures is not a problem. I would like to call it from my android app (my first app aside from the typical hello world).

    I am developing to android 2.3.3 using Eclipse. Looking at the 30 second image I understand the concept of RoboSpice and the failings of other technologies. But I am swimming in information on where to start. I figured getting the jar's I needed would be a good start then looking at some examples....but I got lost in the downloads as to which jars are needed.

    So that would be my first request. How do I determine what jar's I need to communicate with a WCF web service that is returning a string??

    My guess to this point is to use the 1.3.1 spring android jar but I know there are others I will need.

    OK so now I am reading that I need to run RoboSpice from within an Android Service???

    enhancement 
    opened by ramjet69 20
  • Reliable ANR related to SpiceServiceListener when SpiceManager is Starting

    Reliable ANR related to SpiceServiceListener when SpiceManager is Starting

    I have noticed that I can reliably produce an Application Not Responding error which seems to be an infinite deadlock using Robospice 1.4.11 with robospice-retrofit if I attempt to install and run the app via ADB while the screen is off on the physical device. The device used is a Nexus 7 (2012) running the most recent version of KitKat 4.4.2. It looks like the SpiceManager is attempting to start and stop at the same time, resulting in a deadlock. I'm attaching the ANR traces.txt.

    Although the method used to reproduce this bug is hardly a normal use case, I fear that this ANR may appear in other usage patterns which are more typical. For example, I would expect this problem to trigger when the app gets updated while the device screen is off.

    ----- pid 22497 at 2014-02-28 10:12:30 -----
    Cmd line: com.ourcompany.ourproduct
    
    JNI: CheckJNI is off; workarounds are off; pins=1; globals=269
    
    DALVIK THREADS:
    (mutexes: tll=0 tsl=0 tscl=0 ghl=0)
    
    "main" prio=5 tid=1 MONITOR
      | group="main" sCount=1 dsCount=0 obj=0x41881ca8 self=0x414c5468
      | sysTid=22497 nice=0 sched=0/0 cgrp=apps handle=1074319700
      | state=S schedstat=( 323099000 97607000 705 ) utm=21 stm=11 core=0
      at com.octo.android.robospice.SpiceManager.isStarted(SpiceManager.java:~221)
      - waiting to lock <0x41ffdae0> (a com.ourcompany.ourproduct.network.ourcompanySpiceManager) held by tid=28 (Thread-649)
      at com.ourcompany.ourproduct.ui.BaseActivity.onStop(BaseActivity.java:59)
      at com.ourcompany.ourproduct.ui.MainActivity.onStop(MainActivity.java:264)
      at android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1212)
      at android.app.Activity.performStop(Activity.java:5376)
      at android.app.ActivityThread.handleSleeping(ActivityThread.java:3302)
      at android.app.ActivityThread.access$2900(ActivityThread.java:135)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:136)
      at android.app.ActivityThread.main(ActivityThread.java:5017)
      at java.lang.reflect.Method.invokeNative(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:515)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
      at dalvik.system.NativeStart.main(Native Method)
    
    "DataRequestDispatcher" prio=5 tid=14 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x42015298 self=0x64ff7660
      | sysTid=22563 nice=0 sched=0/0 cgrp=apps handle=1697400424
      | state=S schedstat=( 7190000 3582000 6 ) utm=0 stm=0 core=1
      #00  pc 00020790  /system/lib/libc.so (select+20)
      #01  pc 0000893d  /system/lib/libjavacrypto.so
      #02  pc 00009955  /system/lib/libjavacrypto.so
      #03  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #04  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #05  pc 00026fe0  /system/lib/libdvm.so
      #06  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #07  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #08  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #09  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #10  pc 0005528b  /system/lib/libdvm.so
      #11  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #12  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
      at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:689)
      at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
      at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191)
      at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82)
      at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174)
      at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180)
      at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235)
      at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259)
      at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279)
      at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121)
      at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428)
      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
      at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
      at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:257)
      at maps.a.a.a((null):-1)
      at maps.a.a.execute((null):-1)
      at maps.a.a.execute((null):-1)
      at maps.bu.b.g((null):-1)
      at maps.bu.b.b((null):-1)
      at maps.bn.h.run((null):-1)
      at java.lang.Thread.run(Thread.java:841)
    
    "Thread-651" prio=1 tid=29 MONITOR
      | group="main" sCount=1 dsCount=0 obj=0x420d98e0 self=0x652c4008
      | sysTid=22536 nice=19 sched=0/0 cgrp=apps/bg_non_interactive handle=1697403632
      | state=S schedstat=( 17989000 82312000 203 ) utm=0 stm=1 core=0
      at com.octo.android.robospice.SpiceManager$SpiceManagerCommand.call(SpiceManager.java:~1320)
      - waiting to lock <0x41ffdae0> (a com.ourcompany.ourproduct.network.ourcompanySpiceManager) held by tid=28 (Thread-649)
      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at java.lang.Thread.run(Thread.java:841)
    
    "Thread-649" prio=1 tid=28 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x420f6b50 self=0x6861eb10
      | sysTid=22534 nice=19 sched=0/0 cgrp=apps/bg_non_interactive handle=1697394224
      | state=S schedstat=( 1372000 1286000 2 ) utm=0 stm=0 core=1
      at java.lang.Object.wait(Native Method)
      - waiting on <0x420bfb60> (a java.lang.VMThread) held by tid=28 (Thread-649)
      at java.lang.Thread.parkFor(Thread.java:1205)
      at sun.misc.Unsafe.park(Unsafe.java:325)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
      at com.octo.android.robospice.SpiceManager.waitForServiceToBeBound(SpiceManager.java:1241)
      at com.octo.android.robospice.SpiceManager$SpiceManagerCommand.call(SpiceManager.java:1325)
      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at java.lang.Thread.run(Thread.java:841)
    
    "SpiceManagerThread 0" prio=1 tid=27 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x41ffc0e0 self=0x64f8a628
      | sysTid=22533 nice=19 sched=0/0 cgrp=apps/bg_non_interactive handle=1694810120
      | state=S schedstat=( 3175000 3019000 10 ) utm=0 stm=0 core=1
      at java.lang.Object.wait(Native Method)
      - waiting on <0x41ffc1e0> (a java.lang.VMThread) held by tid=27 (SpiceManagerThread 0)
      at java.lang.Thread.parkFor(Thread.java:1205)
      at sun.misc.Unsafe.park(Unsafe.java:325)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
      at com.octo.android.robospice.SpiceManager.waitForServiceToBeBound(SpiceManager.java:1241)
      at com.octo.android.robospice.SpiceManager.run(SpiceManager.java:252)
      at java.lang.Thread.run(Thread.java:841)
    
    "Thread-646" prio=5 tid=26 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x420176b0 self=0x652873b8
      | sysTid=22530 nice=0 sched=0/0 cgrp=apps handle=1697150992
      | state=S schedstat=( 908000 11463000 11 ) utm=0 stm=0 core=0
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.j.e.run((null):-1)
    
    "[email protected]@420ce4d0" daemon prio=5 tid=25 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x4204ad20 self=0x6527f948
      | sysTid=22529 nice=0 sched=0/0 cgrp=apps handle=1697119648
      | state=S schedstat=( 222000 1126000 3 ) utm=0 stm=0 core=0
      at java.lang.Object.wait(Native Method)
      - waiting on <0x4200b028> (a java.lang.ref.ReferenceQueue)
      at java.lang.Object.wait(Object.java:401)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:102)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:73)
      at org.apache.http.impl.conn.tsccm.RefQueueWorker.run(RefQueueWorker.java:102)
      at java.lang.Thread.run(Thread.java:841)
    
    "GLThread 644" prio=5 tid=22 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x420c5178 self=0x6527c008
      | sysTid=22528 nice=0 sched=0/0 cgrp=apps handle=1697115216
      | state=S schedstat=( 408000 833000 10 ) utm=0 stm=0 core=0
      at java.lang.Object.wait(Native Method)
      - waiting on <0x420a1288> (a maps.aj.z)
      at java.lang.Object.wait(Object.java:364)
      at maps.aj.y.l((null):-1)
      at maps.aj.y.run((null):-1)
    
    "Thread-642" prio=1 tid=23 TIMED_WAIT
      | group="main" sCount=1 dsCount=0 obj=0x420581b0 self=0x6527c988
      | sysTid=22526 nice=19 sched=0/0 cgrp=apps/bg_non_interactive handle=1697107424
      | state=S schedstat=( 10180000 48718000 149 ) utm=1 stm=0 core=0
      at java.lang.Object.wait(Native Method)
      - waiting on <0x4205ff68> (a java.lang.Object)
      at java.lang.Object.wait(Object.java:401)
      at maps.by.c.c((null):-1)
      at maps.by.c.run((null):-1)
      at maps.bx.b.run((null):-1)
    
    "ibs" prio=5 tid=21 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x42005eb0 self=0x6504ecf0
      | sysTid=22524 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1694822728
      | state=S schedstat=( 1846000 4017000 20 ) utm=0 stm=0 core=0
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.ae.n.e((null):-1)
      at maps.ax.b.run((null):-1)
    
    "vts_inaka_com.ourcompany.ourproduct" prio=5 tid=20 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x420006f8 self=0x6504e008
      | sysTid=22523 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1694819424
      | state=S schedstat=( 1353000 853000 6 ) utm=0 stm=0 core=1
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.ae.d.e((null):-1)
      at maps.ae.ae.e((null):-1)
      at maps.ax.b.run((null):-1)
    
    "vts_labl_com.ourcompany.ourproduct" prio=5 tid=19 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x42054a38 self=0x650098b8
      | sysTid=22522 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1694539024
      | state=S schedstat=( 1330000 1124000 8 ) utm=0 stm=0 core=1
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.ae.d.e((null):-1)
      at maps.ae.ae.e((null):-1)
      at maps.ax.b.run((null):-1)
    
    "its_ter" prio=5 tid=18 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x42002478 self=0x6504d8a8
      | sysTid=22521 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1694817536
      | state=S schedstat=( 1389000 3767000 25 ) utm=0 stm=0 core=0
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.ae.d.e((null):-1)
      at maps.ax.b.run((null):-1)
    
    "vts_traf_com.ourcompany.ourproduct" prio=5 tid=17 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x4200f718 self=0x6504d038
      | sysTid=22520 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1694657624
      | state=S schedstat=( 296000 329000 2 ) utm=0 stm=0 core=1
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.ae.d.e((null):-1)
      at maps.ae.ae.e((null):-1)
      at maps.ax.b.run((null):-1)
    
    "its" prio=5 tid=16 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x42037360 self=0x650263b0
      | sysTid=22519 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1694656520
      | state=S schedstat=( 1425000 3125000 10 ) utm=0 stm=0 core=1
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.ae.d.e((null):-1)
      at maps.ax.b.run((null):-1)
    
    "vts_com.ourcompany.ourproduct" prio=5 tid=15 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x42069618 self=0x40071008
      | sysTid=22518 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1074162712
      | state=S schedstat=( 2662000 4925000 13 ) utm=0 stm=0 core=1
      #00  pc 000217f4  /system/lib/libc.so (epoll_wait+12)
      #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
      #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
      #03  pc 0006a121  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
      #04  pc 0001dbcc  /system/lib/libdvm.so (dvmPlatformInvoke+112)
      #05  pc 0004e123  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
      #06  pc 00026fe0  /system/lib/libdvm.so
      #07  pc 0002dfa0  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
      #08  pc 0002b638  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
      #09  pc 00060581  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
      #10  pc 000605a5  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
      #11  pc 0005528b  /system/lib/libdvm.so
      #12  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #13  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at android.os.MessageQueue.nativePollOnce(Native Method)
      at android.os.MessageQueue.next(MessageQueue.java:138)
      at android.os.Looper.loop(Looper.java:123)
      at maps.ae.d.e((null):-1)
      at maps.ae.ae.e((null):-1)
      at maps.ax.b.run((null):-1)
    
    "pool-3-thread-1" prio=5 tid=11 TIMED_WAIT
      | group="main" sCount=1 dsCount=0 obj=0x4208d450 self=0x64feaa28
      | sysTid=22517 nice=0 sched=0/0 cgrp=apps handle=1694443600
      | state=S schedstat=( 239000 9347000 3 ) utm=0 stm=0 core=0
      at java.lang.Object.wait(Native Method)
      - waiting on <0x4208d598> (a java.lang.VMThread) held by tid=11 (pool-3-thread-1)
      at java.lang.Thread.parkFor(Thread.java:1205)
      at sun.misc.Unsafe.park(Unsafe.java:325)
      at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:197)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2056)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1062)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at java.lang.Thread.run(Thread.java:841)
    
    "Crashlytics Trace Manager" prio=5 tid=13 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x420300b0 self=0x400665c8
      | sysTid=22515 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1694444656
      | state=S schedstat=( 827000 865000 3 ) utm=0 stm=0 core=0
      at java.lang.Object.wait(Native Method)
      - waiting on <0x4200a280> (a java.lang.VMThread) held by tid=13 (Crashlytics Trace Manager)
      at java.lang.Thread.parkFor(Thread.java:1205)
      at sun.misc.Unsafe.park(Unsafe.java:325)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1050)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:778)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at com.crashlytics.android.internal.ak.a(SourceFile:44)
      at com.crashlytics.android.internal.Y.run(SourceFile:13)
      at java.lang.Thread.run(Thread.java:841)
    
    "Crashlytics Exception Handler" prio=5 tid=12 WAIT
      | group="main" sCount=1 dsCount=0 obj=0x42021e20 self=0x64e8f748
      | sysTid=22512 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1692990368
      | state=S schedstat=( 14581000 19280000 27 ) utm=0 stm=1 core=0
      at java.lang.Object.wait(Native Method)
      - waiting on <0x42022250> (a java.lang.VMThread) held by tid=12 (Crashlytics Exception Handler)
      at java.lang.Thread.parkFor(Thread.java:1205)
      at sun.misc.Unsafe.park(Unsafe.java:325)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2017)
      at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
      at com.crashlytics.android.internal.ak.a(SourceFile:44)
      at com.crashlytics.android.internal.Y.run(SourceFile:13)
      at java.lang.Thread.run(Thread.java:841)
    
    "Binder_2" prio=5 tid=10 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x41ff33e0 self=0x40013008
      | sysTid=22509 nice=0 sched=0/0 cgrp=apps handle=1073741832
      | state=S schedstat=( 593000 8063000 7 ) utm=0 stm=0 core=1
      #00  pc 00020640  /system/lib/libc.so (__ioctl+8)
      #01  pc 0002cedf  /system/lib/libc.so (ioctl+14)
      #02  pc 0001d375  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+140)
      #03  pc 0001da7f  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+6)
      #04  pc 0001db15  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+48)
      #05  pc 00021921  /system/lib/libbinder.so
      #06  pc 0000ea5d  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+216)
      #07  pc 0004cd81  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+68)
      #08  pc 0000e58f  /system/lib/libutils.so
      #09  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #10  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at dalvik.system.NativeStart.run(Native Method)
    
    "Binder_1" prio=5 tid=9 NATIVE
      | group="main" sCount=1 dsCount=0 obj=0x41fefa00 self=0x40035498
      | sysTid=22508 nice=0 sched=0/0 cgrp=apps handle=1073959504
      | state=S schedstat=( 2875000 2554000 15 ) utm=0 stm=0 core=0
      #00  pc 00020640  /system/lib/libc.so (__ioctl+8)
      #01  pc 0002cedf  /system/lib/libc.so (ioctl+14)
      #02  pc 0001d375  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+140)
      #03  pc 0001da7f  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+6)
      #04  pc 0001db15  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+48)
      #05  pc 00021921  /system/lib/libbinder.so
      #06  pc 0000ea5d  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+216)
      #07  pc 0004cd81  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+68)
      #08  pc 0000e58f  /system/lib/libutils.so
      #09  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #10  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at dalvik.system.NativeStart.run(Native Method)
    
    "FinalizerWatchdogDaemon" daemon prio=5 tid=8 TIMED_WAIT
      | group="system" sCount=1 dsCount=0 obj=0x41fec750 self=0x4160fa40
      | sysTid=22507 nice=0 sched=0/0 cgrp=apps handle=1096875672
      | state=S schedstat=( 270000 2605000 5 ) utm=0 stm=0 core=0
      at java.lang.VMThread.sleep(Native Method)
      at java.lang.Thread.sleep(Thread.java:1013)
      at java.lang.Thread.sleep(Thread.java:995)
      at java.lang.Daemons$FinalizerWatchdogDaemon.sleepFor(Daemons.java:248)
      at java.lang.Daemons$FinalizerWatchdogDaemon.waitForFinalization(Daemons.java:258)
      at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:212)
      at java.lang.Thread.run(Thread.java:841)
    
    "FinalizerDaemon" daemon prio=5 tid=7 WAIT
      | group="system" sCount=1 dsCount=0 obj=0x41fec5a0 self=0x4160f318
      | sysTid=22506 nice=0 sched=0/0 cgrp=apps handle=1096873840
      | state=S schedstat=( 16410000 7324000 39 ) utm=1 stm=0 core=1
      at java.lang.Object.wait(Native Method)
      - waiting on <0x41876718> (a java.lang.ref.ReferenceQueue)
      at java.lang.Object.wait(Object.java:401)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:102)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:73)
      at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
      at java.lang.Thread.run(Thread.java:841)
    
    "ReferenceQueueDaemon" daemon prio=5 tid=6 WAIT
      | group="system" sCount=1 dsCount=0 obj=0x41fec438 self=0x64f7a460
      | sysTid=22505 nice=0 sched=0/0 cgrp=apps handle=1693952184
      | state=S schedstat=( 2305000 913000 30 ) utm=0 stm=0 core=0
      at java.lang.Object.wait(Native Method)
      - waiting on <0x41876640> 
      at java.lang.Object.wait(Object.java:364)
      at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:130)
      at java.lang.Thread.run(Thread.java:841)
    
    "Compiler" daemon prio=5 tid=5 VMWAIT
      | group="system" sCount=1 dsCount=0 obj=0x41fec348 self=0x64f7a008
      | sysTid=22504 nice=0 sched=0/0 cgrp=apps handle=1095861376
      | state=S schedstat=( 99333000 34411000 345 ) utm=4 stm=5 core=0
      #00  pc 000219bc  /system/lib/libc.so (__futex_syscall3+8)
      #01  pc 0000ef7c  /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
      #02  pc 0000efdc  /system/lib/libc.so (__pthread_cond_timedwait+64)
      #03  pc 00073cff  /system/lib/libdvm.so
      #04  pc 0005496d  /system/lib/libdvm.so
      #05  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #06  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at dalvik.system.NativeStart.run(Native Method)
    
    "JDWP" daemon prio=5 tid=4 VMWAIT
      | group="system" sCount=1 dsCount=0 obj=0x41fec260 self=0x41518028
      | sysTid=22503 nice=0 sched=0/0 cgrp=apps handle=1074183272
      | state=S schedstat=( 3731000 3154000 19 ) utm=0 stm=0 core=0
      #00  pc 00020790  /system/lib/libc.so (select+20)
      #01  pc 0006148f  /system/lib/libdvm.so
      #02  pc 00063fe1  /system/lib/libdvm.so
      #03  pc 0005496d  /system/lib/libdvm.so
      #04  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #05  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at dalvik.system.NativeStart.run(Native Method)
    
    "Signal Catcher" daemon prio=5 tid=3 RUNNABLE
      | group="system" sCount=0 dsCount=0 obj=0x41fec168 self=0x4006b810
      | sysTid=22502 nice=0 sched=0/0 cgrp=apps handle=1096879032
      | state=R schedstat=( 43220000 12993000 44 ) utm=2 stm=2 core=0
      at dalvik.system.NativeStart.run(Native Method)
    
    "GC" daemon prio=5 tid=2 VMWAIT
      | group="system" sCount=1 dsCount=0 obj=0x41fec088 self=0x41611688
      | sysTid=22501 nice=0 sched=0/0 cgrp=apps handle=1096883784
      | state=S schedstat=( 153973000 35837000 1985 ) utm=9 stm=6 core=0
      #00  pc 000219c0  /system/lib/libc.so (__futex_syscall3+12)
      #01  pc 0000ef7c  /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
      #02  pc 0000efdc  /system/lib/libc.so (__pthread_cond_timedwait+64)
      #03  pc 000528dd  /system/lib/libdvm.so (dvmRelativeCondWait(pthread_cond_t*, pthread_mutex_t*, long long, int)+24)
      #04  pc 00072773  /system/lib/libdvm.so
      #05  pc 0005496d  /system/lib/libdvm.so
      #06  pc 0000d228  /system/lib/libc.so (__thread_entry+72)
      #07  pc 0000d3c0  /system/lib/libc.so (pthread_create+240)
      at dalvik.system.NativeStart.run(Native Method)
    
    ----- end 22497 -----
    
    bug next release 
    opened by colintheshots 19
  • Request dropped when stopping the SpiceManager

    Request dropped when stopping the SpiceManager

    Hi.

    I have encountered the issue referred to by @stephanenicolas on https://github.com/octo-online/robospice/issues/143

    I am calling SpiceManager.shouldStop() directly after calling SpiceManager.execute(...) - which as you say results in the request not being executed. I think this is a design flaw as the SpiceService should only really stop when all activities / fragments are unbound and all requests have finished executing. This is a viable use-case IMHO as I want to use the same thread-pool as my other SpiceRequests but in this case I do not need to wait for the request to return before leaving the activity.

    Am I missing something here?

    Love Robospice apart from that :) Thank you

    bug enhancement 
    opened by doridori 18
  • Xmlrpc Request

    Xmlrpc Request

    How can I use xmlrpc request. I have my own object which handle everything very well and returns data response. I want to keep using my object to do network related task and finally willing to save to realm. All work should be done by my object but I still want to use robospice to handle all background thread. Is it robospice suitable for my case please help I'm totally screwed with asynctask. I'm using account manager to fetch data for different user account and finally I'm saving it to realm as default account. The problem occurred whe. I switched account in case asynctask running and it never stoppes which leads wrong data on wrong account.

    opened by ashishislive 0
  • Android O (8.1.0) : invalid channel for service notification

    Android O (8.1.0) : invalid channel for service notification

    I've got this new error for users using android 8.1.0 : "android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null..."

    I can reproduce the error on emulator using API level 27.

    I've found this topic : https://stackoverflow.com/questions/47531742/startforeground-fail-after-upgrade-to-android-8-1

    The error is not systematic and depend on the robospice service : if the service is completed when onDestroy is called => no crash, if the service is still running => crash.

    I'm not 100% that the crash is due to Robospice, but I do not use notification manager in my code, and it always crash when leaving the app with service un background.

    Here is the full error in logcat : E/UncaughtException: android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=-2 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1768) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

    Thanks for your help.

    opened by MS893 8
  • RoboSpice within the MVVM pattern

    RoboSpice within the MVVM pattern

    How would RoboSpice interact within the new MVVM Architecture Components introduced at Google IO 2017? Considering we'd have a data layer consisting of repositories which fetch data from a web API and store that data inside an ORM, all of this without taking life-cycle into account and the view layer not knowing anything about the data layer (thus not being able to start/stop the SpiceManager inside Activities and Fragments).

    I've tried to search the issues for relevant threads and the best I could find was this one from 3 years ago: https://github.com/stephanenicolas/robospice/issues/211

    Architecture Components reference: https://developer.android.com/topic/libraries/architecture/index.html

    opened by bogdanzurac 2
  • Build failed on windows (android studio2.23 @win7 64-bit), but no problem on Mac.

    Build failed on windows (android studio2.23 @win7 64-bit), but no problem on Mac.

    Here is the error message: com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/apache/commons/io/CopyUtils.class

    If I try to include it in the following way. It gives some bugs(some request doesn't gives the response ) /compile ('com.octo.android.robospice:robospice-spring-android:1.4.14'){ exclude group: 'org.apache.commons', module: 'commons-io' }/ //compile 'commons-io:commons-io:1.3.2'

    opened by sunszl 4
  • Download a file with query params

    Download a file with query params

    Hello,

    I am looking for a way to download a file from server, I see two options, one of them is to use: BinaryRequest but it works only if you pass the total path of the file, for example: "https://www.ietf.org/rfc/rfc2616.txt", and I need to send parameters to the server in this way: api/SomeServiceTranslationFile?Language=en", in that request I send the parameter "en" and RS responds with a Java.io.FileNotFoundException: .

    The other way is to make use of RetrofitSpiceRequest <InputStream, MyInterface> , here I send my parameters like any other request, however, the response is treated to be parsed by GSON An exception occurred during request network execution :Failed to invoke public java.io.InputStream() with no args retrofit.RetrofitError: Failed to invoke public java.io.InputStream() with no args

    Have any suggestions?

    opened by jclemus91 1
  • Android O background service limitations

    Android O background service limitations

    How do the new background service limitations in the newest Android O Developer Preview affect RoboSpice? Even on earlier releases, when the Activity goes into background and a request hasn't finished yet, a blank notification is being shown.

    Reference: https://developer.android.com/preview/features/background.html#services

    opened by bogdanzurac 5
Releases(robospice-parent-1.4.5)
  • robospice-parent-1.4.5(Jul 11, 2013)

    ** Enhancements

    • Enhanced threading model for the SpiceManager and SpiceService. Decreased priority to increase UI Thread performance and enhance user experience.
    • Add isDataInCache and getDateOfDataInCache to spiceManager. Thx to Onyx Mueller and Mathieu Castets for suggesting this feature.
    • BitmapRequests, SimpleTextRequests have non final methods to allow developpers to extend them
    • SpiceList APIs have been changed to allow multiple images per cell view in a list. Thx to Andrea Altobelli for submitting the feature.

    ** Bug fixes

    • Cache folder creation is now thread safe.
    • Correct bug of cache removal when there cache folder doesn't exist or is empty.
    • SpiceArrayAdapter's getView method is not final any more to allow subclasses to customize adapters (adding sections for instance). Thanks to Christopher Parola for this suggestion.
    Source code(tar.gz)
    Source code(zip)
Owner
Stéphane Nicolas
Open source enthusiast, Java & Linux fan, Android dev. Favorite topics: quality, performance, testability, dependency injection, continuous integration, gradle.
Stéphane Nicolas
SimpleApiCalls is a type-safe REST client for Android. The library provides the ability to interact with APIs and send network requests with HttpURLConnection.

SimpleApiCalls ?? SimpleApiCalls is a type-safe REST client for Android. The library provides the ability to interact with APIs and send network reque

null 4 Nov 28, 2022
A small Android project to practice executing network requests and parsing the network response

InspirationalQuotesExercise A small Android project to practice executing network requests and parsing the network response This app uses the ZenQuote

Caren 0 Oct 13, 2021
Kotlin HTTP requests library. Similar to Python requests.

khttp khttp is a simple library for HTTP requests in Kotlin. It functions similarly to Python's requests module. import khttp.get fun main(args: Arra

Anna Clemens 466 Dec 20, 2022
Write your asynchronous Network / IO call painlessly in Kotlin !!

Asynkio : Write asynced IO/ Network calls painlessly on android | | | Documentation Write your network requests, IO calls in android with Kotlin seaml

Nikhil Chaudhari 82 Jan 26, 2022
Kotlin-REST-Retrofit - Simple client to consume a REST API with Retrofit using Kotlin

Kotlin REST Retrofit Sencillo cliente para consumir una API REST con Retrofit us

José Luis González Sánchez 5 Nov 4, 2022
Easy, asynchronous, annotation-based SOAP for Android

IceSoap IceSoap provides quick, easy, asynchronous access to SOAP web services from Android devices. It allows for SOAP responses to be bound to Java

Alex Gilleran 75 Nov 29, 2022
Compact and easy to use, 'all-in-one' android network solution

Deprecated Unfortunately due to many reasons including maintenance cost, this library is deprecated. I recommend to use Retrofit/OkHttp instead. Curre

Orhan Obut 585 Dec 30, 2022
Flower - Super cool Android library to manage networking and database caching with ease

Flower Super cool Android library to manage networking and database caching with ease. It allows developers to use remote resources on-the-fly OR Comb

Rajesh Hadiya 192 Dec 26, 2022
Asynchronous socket, http(s) (client+server) and websocket library for android. Based on nio, not threads.

AndroidAsync AndroidAsync is a low level network protocol library. If you are looking for an easy to use, higher level, Android aware, http request li

Koushik Dutta 7.3k Jan 2, 2023
Asynchronous Http and WebSocket Client library for Java

Async Http Client Follow @AsyncHttpClient on Twitter. The AsyncHttpClient (AHC) library allows Java applications to easily execute HTTP requests and a

AsyncHttpClient 6k Jan 8, 2023
Android Asynchronous Networking and Image Loading

Android Asynchronous Networking and Image Loading Download Maven Git Features Kotlin coroutine/suspend support Asynchronously download: Images into Im

Koushik Dutta 6.3k Dec 27, 2022
An android asynchronous http client built on top of HttpURLConnection.

Versions 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 Version 1.0.6 Description An android asynchronous http client based on HttpURLConnection. Updates U

David 15 Mar 29, 2020
Pluto is a on-device debugger for Android applications, which helps in inspection of HTTP requests/responses, capture Crashes and ANRs and manipulating application data on-the-go.

Pluto Pluto is a on-device debugger for Android applications, which helps in inspection of HTTP requests/responses, capture Crashes and ANRs and manip

Mocklets 8 Aug 22, 2022
super simple library to manage http requests.

HttpAgent super simple library to manage http requests. Gradle dependencies { implementation 'com.studioidan.httpagent:httpagent:1.0.16@aar' } No

idan ben shimon 32 Oct 24, 2021
Whois4K - A library for who is requests

Whois4K - A library for who is requests

Lyzev 1 Apr 6, 2022
Volley is an HTTP library that makes networking for Android apps easier and, most importantly, faster.

Volley Volley is an HTTP library that makes networking for Android apps easier and, most importantly, faster. For more information about Volley and ho

Google 3.3k Jan 1, 2023
CheckInternetConnection - CheckInternetConnection helps to find out if user`s Android device is connected to Internet or not

Check Internet Connection CheckInternetConnection helps to find out if user`s An

Hamed.D 1 Jan 16, 2022
Android library listening network connection state and change of the WiFi signal strength with event bus

NetworkEvents Android library listening network connection state and change of the WiFi signal strength with event bus. It works with any implementati

Piotr Wittchen 452 Nov 21, 2022
Android network client based on Cronet. This library let you easily use QUIC protocol in your Android projects

Android network client based on Cronet. This library let you easily use QUIC protocol in your Android projects

VK.com 104 Dec 12, 2022