Latest News Roku’s Weird Al movie is ridiculous in the best possible ways

– Commercial –

Posted byNiharika AroraDeveloper Relations Engineer

– Commercial –

– Commercial –

The Android working system brings the facility of computing to everybody. This imaginative and prescient applies to all customers, together with these on entry-level telephones that face actual constraints throughout knowledge, storage, reminiscence, and extra.
This was particularly essential for us to get proper as a result of, once we first announced Android (Go version) again in 2017, folks utilizing low-end telephones accounted for 57% of all gadget shipments globally (IDC Mobile Phone Tracker,

– Commercial –

What’s Android (Go version)?Android (Go version) is a cell working system constructed for entry-level smartphones with much less RAM. Android (Go version) runs lighter and saves knowledge, enabling Unique Tools Producers (OEMs) to construct inexpensive, entry-level gadgets that empower folks with chance. RAM necessities are listed beneath, and for full Android (Go version) gadget functionality specs, see this page on our website.

Yr

2017

2018

2019

2020

2021

2022

Launch

Android 8

Android 9

Android 10

Android 11

Android 12

Android 13

Min RAM

512MB

512MB

512MB

1GB

1GB

2GB

Current UpdatesWe are continuously making telephones powered by Android (Go version) extra accessible with further efficiency optimizations and options designed particularly for brand new & novice web customers, like translation, app switching, and knowledge saving.

Beneath are the current enhancements we made for Android 12,

Quicker App Launches

Longer Battery Life

Simpler App Sharing

Extra Privateness Management

Why construct for Android (Go version)?With the quick rising & simply accessible web, and all of the options obtainable at low value, OEMs and builders are aiming & constructing their apps particularly for Android (Go version) gadgets.

Quick ahead to at the moment — many individuals worldwide actively use an Android (Go version) cellphone. And in addition contemplating the massive OEMs like Jio, Samsung, Oppo, Realme and many others. constructing Android (Go version) gadgets, there’s a want for builders to construct apps that carry out effectively particularly on Go gadgets.

However the markets with the quick rising web and smartphone penetration can have some difficult points, equivalent to:
Your app is just not beginning inside the required time restrict.Loads of options/required capabilities will increase your app dimension How one can deal with reminiscence stress whereas engaged on Go apps?

Optimize your apps for Android (Go version)To assist your app succeed and ship the absolute best expertise in creating markets, we now have put collectively some greatest practices based mostly on expertise constructing our personal Google apps Gboard , Camera from Google.

ApproachPhasesDescription Outline Earlier than beginning any optimization effort, it’s essential to outline the targets. Key Efficiency Indicators (KPIs) should be outlined for the app.
KPIs could be frequent throughout totally different apps and a few could be very particular. Some examples of KPIs could be KPICategoryApp Startup Latency
Frequent to all appsApp Crash Fee
Frequent to all appsEnd to finish latency for CUJ – Digital camera Shot
Particular to Digital camera appApp Not Responding RateCommon to all appsOnce KPIs are outlined the workforce ought to agree on the goal thresholds. This may be derived from the minimal consumer expertise/benchmarks in thoughts.KPIs ought to ideally be outlined from the attitude of balancing Consumer Expertise and technical complexity.BreakdownOnce KPIs are outlined, the following steps might be to interrupt down a given KPI into particular person sign metrics .
For instance → Finish to finish latency for CUJ (pictures in Digital camera) could be divided into → Body seize latency, picture processing latency, time spent on saving a processed picture to disk and many others.Equally, App Crash Fee could be bucketed into → Crash as a result of unhandled errors, Crash as a result of excessive reminiscence utilization, Crash as a result of ANR and many others.BenchmarkBenchmark or measure the KPI values ​​and particular person metrics to determine present efficiency.
If KPI targets are met, issues are good. If not → determine the bottlenecks by wanting on the particular person breakdowns. Repeat the method

After optimizing a sure bottleneck return and benchmark the metrics once more to see if the KPI targets are met. If not, repeat the method. If sure, nice job!Add Common regression testThat both runs for each change or in some frequency to determine regressions in KPIs. It’s tougher to debug and discover sources of regressions or bugs than to not enable them to get into the codebase. Don’t enable the adjustments that fail the KPI targets except the choice is to replace the KPI targets.
Attempt to put money into constructing a regression infrastructure to cope with such points in early phases. Resolve on how typically assessments ought to run? What ought to be the optimum frequency on your app?

Optimize App Reminiscence

Launch cache-like reminiscence in onTrimMemory():onTrimMemory() has at all times confirmed helpful for an app to trim unneeded reminiscence from its course of. To greatest know an app’s present trim degree, you should utilize ActivityManager.getMyMemoryState(RunningAppProcessInfo) after which attempt to optimize/trim the sources which aren’t wanted.

GBoard used the onTrimMemory() sign to trim unneeded reminiscence whereas it goes within the background and there’s not sufficient reminiscence to maintain as many background processes operating as desired, for instance, trimming unneeded reminiscence utilization from expressions, search, view cache or openable extensions in background. It helped them cut back the variety of occasions being low reminiscence killed and the typical background RSS. Resident Set Measurement(RSS) is principally the portion of reminiscence occupied by your app course of that’s held in foremost reminiscence (RAM). To know extra about RSS, please refer here, Test if malloc could be changed with mmap when accessing read-only & giant recordsdata:mmap is barely really helpful for studying a big file onto reminiscence (‘read-only reminiscence mapped file’). The kernel has some particular optimizations for read-only reminiscence mapped recordsdata, equivalent to unloading unused pages.Usually that is helpful for loading giant belongings or ML fashions.Scheduling duties which require comparable sources(CPU, IO, Reminiscence) appropriately: Concurrent scheduling may result in a number of reminiscence intensive operations to run in parallel and resulting in them competing for sources and exceeding the height reminiscence utilization of the app. The Digital camera from Google app discovered a number of issues, ensured a cap to peak reminiscence and additional optimized their app by appropriately allocating sources, separating duties into CPU intensive, low latency duties(duties that should be completed quick for Good UX) & IO duties. Schedule duties in proper thread pools / executors to allow them to run on useful resource constrained gadgets in a balanced vogue.Discover & repair reminiscence leaks: Combating leaks is troublesome however there are instruments like Android Studio Memory Profiler,Perfetto particularly obtainable to cut back the hassle to seek out and repair reminiscence leaks. Google apps used the instruments to determine and repair reminiscence points which helped cut back the reminiscence utilization/footprint of the app. This discount allowed different elements of the app to run with out including further reminiscence stress on the system.
An instance from Gboard app is about View leaksA particular case is caching subviews, like this:

void onKeyboardViewCreated(View keyboardView) {
this.keyButtonA = keyboardView.findViewById(…);
,
,

The |keyboardView| could be launched at a while, and the |keyButtonA| ought to be assigned as null appropriately at a while to keep away from the view leak.

Classes discovered:All the time add framework/library updates after analyzing the adjustments and verifying its impression early on.Make sure that to launch reminiscence earlier than assigning new worth to a pointer pointing to different object allocation in heap in Java. (native backend java objects) For instance :In Java it ought to be alright to do

ClassA obj = new ClassA(“x”);
// … one thing
obj = new ClassB(“y”);

GC ought to clear this up ultimately. if ClassA allocates native sources beneath and doesn’t cleanup mechanically on finalize(..) and requires caller to name some launch(..) methodology, it must be like this

ClassA obj = new ClassA(“x”);
// … one thing

// Express cleanup.
obj.launch();

obj = new ClassB(“y”);

else it’s going to leak native heap reminiscence. Optimize your bitmaps: Massive photographs/drawables often devour extra reminiscence within the app. Google apps recognized and optimized giant bitmaps which might be used of their apps. Classes discovered :Favor Lazy/on-demand initializations of massive drawables.Launch view when mandatory.Keep away from utilizing full coloured bitmaps when attainable. For instance: Gboard’s glide typing characteristic wants to indicate an overlay view with a bitmap of trails, which might solely have the alpha channel and apply a colour filter for rendering.

// Creating the bitmap for trails.

trailBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ALPHA_8);

,

// Setup paint for trails.

trailPaint.setColorFilter(new ColorMatrixColorFilter(new ColorMatrix(new float)[] ,

0, 0, 0, 0, (colour >> 16) & 0xFF,

0, 0, 0, 0, (colour >> 8) & 0xFF,

0, 0, 0, 0, colour & 0xFF,

0, 0, 0, 1, 0

,

,

// onDraw

@Override

protected void onDraw(Canvas canvas) {

tremendous.onDraw(canvas);

if (trailBitmap != null) {

canvas.drawBitmap(trailBitmap, 0, 0, trailPaint);

,

,

 A screenshot of glide typing on GboardCheck and only set the alpha channel for the bitmap for complex custom views used in the app. This saved them a couple of MBs (per screen size/density).While using Glide, The ARGB_8888 format has 4 bytes/pixel consumption while RGB_565 has 2 bytes/pixel. Memory footprint gets reduced to half when RGB_565 format is used but using lower bitmap quality comes with a price too. Whether you need alpha values ​​or not, try to fit your case accordingly.Configure and usecachecorrectly when utilizing a 3P lib like Glide for picture rendering.Strive to decide on different choices for GIFs in your app when constructing for Android (Go version) as GIFs take quite a lot of reminiscence.The aapt The software can optimize the picture sources positioned in res/drawable/ with lossless compression throughout the construct course of. For instance, the aapt software can convert a true-color PNG that doesn’t require greater than 256 colours to an 8-bit PNG with a colour palette. Doing so leads to a picture of equal high quality however a smaller reminiscence footprint. Learn extra here.You may cut back PNG file sizes with out shedding picture high quality utilizing instruments like pngcrush, pngquantor zopflipng, All of those instruments can cut back PNG file dimension whereas preserving the perceptive picture high quality.You may use resizable bitmaps. The Draw 9-patch software is a WYSIWYG editor included in Android Studio that means that you can create bitmap photographs that mechanically resize to accommodate the contents of the view and the dimensions of the display. Study extra in regards to the software here, RecapThis a part of the weblog outlines why builders ought to contemplate constructing for Android (Go version), a typical strategy to comply with whereas optimizing their apps and a few suggestions & learnings from Google apps to enhance their app reminiscence and appropriately allocate sources.

Within the subsequent a part of this weblog, we are going to discuss the perfect practices on Startup latency, app dimension and the instruments utilized by Google apps to determine and repair efficiency points.

Source

– Commercial –

Leave a Comment