In the past few weeks, I had been working on an android application, for reading feed articles, there were quite a few takeaways from that experience and I am just sharing few of those, along with the link and features to the application.
The app can be downloaded from the link: Simply Read on Play Store
Takeaways: -
- Parsing is slow: As I had to design full text content scraper and parser for enabling the user to view the full content of articles, I soon realized the multiple iterations of parsing and scraping can be painfully slow. The same thing that would execute in sub-second on local machine would take 30-40 seconds on an android device, which is unbearable for an end user. Considering that my device was pretty fast, this could be attributed to performance snags with the standard java API implementation by Google. Solution: Move the parsing code to the server, but provide the user an option to use the parser within the app, create a rest service which returns the parsed article.
- Authenticating user requests: This is an interlinked problem to the first one, when I had to move the parsing code to the server side, I needed to ensure that only authenticated user with the application send the parsing requests as I just could not allow everyone to query the backend and retrieve the parsed article. Solution: Use Google+ sign in with server side validation of the client oauth tokens, this ensured that the requests originated from my application on an android device and the user was authenticated before making a parse request.
- Not Using Content providers, So Managing Data Refresh: I chose not to use content providers and instead chose to go with the native API’s for fetching data from the SQLite database and doing the updates. The obvious problem that arises is to manage data refresh across different activities. Solution: I used otto coupled with the loaders to manage data refresh across activities. Using Otto ensured loose coupling of components.
- ProGuard and Retrofit don’t gel well together: There are quite a few standard exclusion rules that you would have to write to get retrofit to work with ProGuard. Just make sure also to exclude classes and attributes that you are going to use with GSON to convert JSON to Object representation. Here’s a snippet of the rules.
-keepattributes Signature
-keepattributes *Annotation*
-keep interface com.squareup.** { *; }
-dontwarn rx.**
-dontwarn retrofit.**
-keep class com.squareup.** { *; }
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
@retrofit.http.* <methods>;
}
//now exclude the response classes and Pojo's
-keep class com.blogspot.ramannanda.apps.simplyread.model.rest.SampleResponse {*;}
Although there are a lot of other takeaways. I am going to keep this brief and look forward to hearing your feedback about the app.