SlideShare une entreprise Scribd logo
1  sur  110
Télécharger pour lire hors ligne
Android Architecture
Components
Mayank Bhatnagar
Ivy Comptech
@mayank.bhatnagar
Darshan Parikh
AYA Carpool
@activesince93
Overview
 Announced at Google IO 2017
 Provide framework to create more maintainable and robust app
 Encourage decoupled components within the app
WHY AAC ?
Basic app
Components
 Room
 Live Data
 Life cycle
 ViewModel
 This year some more components got added to under AAC.
• Navigation
• Paging
• WorkManager
 Together all these components are now a part of Android Jetpack
Model View ViewModel (MVVM)
Model
– Entity class
View
– Activity/Fragment or CustomView
ViewModel
– Interaction with model
– Updating the UI
Data Persistence
- Content Providers
- SharedPreferences
- SQLite
Problems with SQLite?
- Complex and confusing
11
And all we get is a
Cursor!
Problems with SQLite?
- Complex and confusing
- Too much to handle for a small use case
13
Problems with SQLite?
- Complex and confusing
- Too much to handle for a small use case
- No compile time verification
String TABLE_KEYS = "keys";
long KEY_VALUE = 1234;
String KEY_ID = "key_id";
String GET_KEYS = "SELECT * FROM" + TABLE_KEYS + " WHERE " + KEY_ID + " = " +
KEY_VALUE;
db.execSQL(GET_KEYS);
Caused by:
android.database.sqlite.SQLiteException:
near "FROMkeys": syntax error(code 1):
,while compiling: SELECT * FROMkeys where
key_id = 1234
Solution?
Room
SQLite mapping library
Room
- Boilerplate-free code
- SQLite support
- Compile time verification
- Works well with observables
Classes required to implement
database handling in SQLite
- DatabaseHandler extends SQLiteOpenHelper
- UI handler (Activity/Fragment)
- Entity class
Main components of Room
- @Entity
@Entity
class User {
@PrimaryKey
int userId;
String name;
String email;
}
Main components of Room
- @Entity
- @Dao
@Entity
class User {
@PrimaryKey
int userId;
String name;
String email;
}
@Dao
interface UserDao {
@Query("SELECT * FROM users WHERE user_id = :userId")
User get(long userId)
}
Main components of Room
- @Entity
- @Dao
- @Database
@Entity
class User {
@PrimaryKey
int userId;
String name;
String email;
}
@Dao
interface UserDao {
@Query("SELECT * FROM users WHERE user_id = :userId")
User get(long userId)
}
@Database(entities = {User.class}, version = 1)
abstract class MyDatabase extends RoomDatabase {
abstract UserDao userDao();
}
Main components of Room
- @Entity
- @Dao
- @Database
What else?
- Room understands SQLite
@Dao
interface UserDao {
@Query("SELECT * FROM userss WHERE user_id = :userId")
User get(long userId);
}
[SQLITE_ERROR] SQL error or missing database(no such table: userss)
What else?
- Room understands SQLite
- Room perfectly works with LiveData
@Dao
interface UserDao {
@Query("SELECT * FROM users WHERE user_id = :userId")
LiveData<User> get(long userId);
}
- Supports multithreading (WAL compatibility)
Updates in I/O 2018 (Room 1.1)
What is WAL (WriteAheadLogging) compatibility?
- Enables parallel execution of queries from multiple threads
on the same database
- When enabled, write operations occur in a separate log file
which allows reads to proceed concurrently
- Maximum number of connections dependent upon the device
memory
- While write is in progress, readers on other threads will
perceive the state of the database as it was before the write
began. When the write completes, readers on other threads
will then perceive the new state of the database.
- It’s automatically taken care if device is running JB+ and not
running on low RAM (Generally means 1GB or low RAM)
How does it work?
Updates in I/O 2018 (Room 1.1)
- Supports multithreading (WAL compatibility)
- @RawQuery annotation
Problem with @Query
- Even if dynamic implementation is written, it returns Cursor!
- Querying with multiple parameters is complex to maintain
@Dao
interface UserDao {
@RawQuery
List<User> getUsers(SupportSQLiteQuery query);
}
List<Object> params = ...
String query = "SELECT * FROM users where ...";
RoomDatabase db = ...
UserDao userDao = db.userDao();
SimpleSQLiteQuery supportQuery = new SimpleSQLiteQuery(query, params);
List<User> users = userDao.getUsers(supportQuery);
Room
- Boilerplate-free code
- SQLite support
- Compile time verification
- Works well with observables
Handling Lifecycle with Lifecycle-Aware
Components
 Performs action in response to change in the lifecycle status of
another component, such as activities and fragments.
Lifecycle Problem
 LocationManager.start() LocationManager.stop()
Solution
❖ Lifecycle Owners- objects with Lifecycle like Activities and
fragments
❖ Lifecycle Observers- observe Lifecycle Owners and are
notified lifecycle changes
Lifecycle Owner
 Single method interface that denotes that the class has a Lifecycle
 To maintain Lifecycle of a application process extend ProcessLifecycleOwner
Lifecycle Observer
Use cases of Lifecycle-Aware
Components
 Switching between coarse and fine-grained location updates.
 Stopping and starting video buffering.
 Starting and stopping network connectivity.
 Pausing and resuming animated drawables.
BEHIND THE SCENES
Lifecycle
 Holds the information about the lifecycle state of a component (like
an activity or a fragment) and allows other objects to observe this
state.
 It contains two enumerations to track the lifecycle status
State Event
Observing events in JAVA 8
Live Data
 An observable data holder
 It is lifecycle-aware
Advantages of Live Data
 Ensure your UI matches
 No memory leaks
 No crashes due to stopped activities
 No more manual lifecycle handling
 Always up to date data
 Proper configuration changes
Create LiveData Objects
Observe LiveData objects
Where should LiveData objects reside?
WHY ???
 To avoid bloating UI controllers i.e. activities and fragments
 To decouple LiveData instances from specific UI controllers
viewmodel
How to trigger updates using LiveData ?
 mCurrentName () . setValue (“Mayank”);
MutableLiveData
setValue (T) postValue (T)
main thread Worker thread
What is an Active state?
Extend LiveData
Transform LiveData
 Make changes to the value stored in a LiveData object before
dispatching it to the observers
 Helper functions
• Transformation.map()
• Transformation.switchMap()
BEHIND THE SCENES
Diving into “Observe” method
Depends upon
LifecycleOwner
and Observer
instance being
passed
How Observers listens to data update ?
Updates
data and
notify
observers
❖ Invalidates
previous dispatch
if needed
❖ Iterates over
observers to notify
data set change
Notifying Observers
❖ Checks if
Lifecycle
state is
active
❖ Checks
latest data
version is
dispatched
❖ Finally calls
onChanged
method
with new
Data
Disposing the subscription
ViewModel
 Store and manage UI-related data in a lifecycle conscious way.
 It allows data to survive configuration changes such as screen
rotations.
Lifecycle of ViewModel Component
Getting instance of a ViewModel
Implementing your ViewModel class
Share Data between Fragments
Replacing Loaders with ViewModel
Loading data with loaders
Loading data with ViewModel
Behind the scenesBEHIND THE SCENES
ViewModelProviders.of(this)
ViewModelProviders.of(this).get(MyViewModel.class)
How does HolderFragment retains the state?
Navigation Principles
- App should have fixed starting destination
- Stack should define “navigation state”
- Up button never quits the app
- Up and back are equivalent within app’s task
- Deep linking to destination or navigating to the same
destination should yield the same stack
Navigation Component
- Easy in-app navigation
81
<?xml version="1.0" encoding="utf-8"?>
<navigation ...
app:startDestination="@id/homeFragment">
<fragment ...
android:id="@+id/homeFragment">
<action
android:id="@+id/action_homeFragment_to_cartFragment"
app:destination="@id/cartFragment" />
</fragment>
<fragment ...>
<action ... />
<deepLink app:uri="www.demoshop.com/{productId}" />
<argument
android:name="prodId"
android:defaultValue="0"
app:argType="integer" />
</fragment>
</navigation>
Navigation Component
- Easy in-app navigation
- Animations
Navigation Component
- Easy in-app navigation
- Animations
- Passing Arguments
<fragment ...>
<action ... />
<argument
android:name="prodId"
android:defaultValue="0"
app:argType="integer" />
</fragment>
Navigation Component
- Easy in-app navigation
- Animations
- Passing Arguments
- DeepLinks
Explicit DeepLinks
- Notifications
- App Shortcuts
- App Widgets
- Actions
- Slices
NavDeepLinkBuilder navDeepLinkBuilder = new NavDeepLinkBuilder(context)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.android)
.setArguments(bundle);
PendingIntent pendingIntent = navDeepLinkBuilder.createPendingIntent();
notificationBuilder.setContentIntent(pendingIntent);
Implicit DeepLinks
- Web URLs
- Custom Scheme URLs
<fragment ...>
<action ... />
<deepLink app:uri="www.demoshop.com/{productId}" />
</fragment>
Navigation Component
- Easy in-app navigation
- Animations
- Passing Arguments
- DeepLinks
- No more fragment transactions!
Navigation
.findNavController(view)
.navigate(R.id.action_homeFragment_to_productFragment);
MIND = BLOWN
AnroidManifest.xml
<activity
android:name=".MainActivity">
<nav-graph android:value="@navigation/nav_graph"/>
</activity>
Background Jobs
- Sync data
- Uploading logs
- Data backups
Option
- JobScheduler (API 21+)
- FirebaseJobDispacher (API 14+, requires Google Play Services)
- AlarmManager
- Services
- Loaders
Option Options!
Too much to handle!
WorkManager
Job Scheduler
Firebase Job
Dispatcher
Alarms
Work Manager
Components
- Worker
- WorkResult
SUCCESS,
FAILURE,
RETRY
MyWorker.java
public class MyWorker extends Worker {
...
public WorkerResult doWork() {
// Implement background task
return WorkerResult.SUCCESS;
}
}
Workflow
- Worker
- WorkResult
- WorkRequest
OneTimeWorkRequest uploadWork =
new OneTimeWorkRequest.Builder
(MyWorker.class)
.build();
Workflow
- Worker
- WorkResult
- WorkRequest
- WorkManager
OneTimeWorkRequest oneTimeWork =
new OneTimeWorkRequest
.Builder(MyWorker.class)
.build();
// Enqueue work
WorkManager
.getInstance()
.enqueue(oneTimeWork);
Behind the scenes
What else?
- Observing Work
WorkManager
.getInstance()
.getStatusById(myWork.getId())
.observe(lifecycleOwner, workStatus -> {
// Do something with the status
if (workStatus != null &&
workStatus.getState().isFinished())
{ ... }
});
What else?
- Observing Work
- Task constraints
// Whether device should be idle
.setRequiresDeviceIdle(boolean)
// Whether device should be plugged in
.setRequiresCharging(boolean)
// Whether device should have a particular NetworkType
.setRequiredNetworkType(NetworkType)
// Battery should not be below critical threshold
.setRequiresBatteryNotLow(boolean)
// Storage should not be below critical threshold
.setRequiresStorageNotLow(boolean)
What else?
- Observing Work
- Task constraints
- Cancelling task
UUID myWorkId = myWorkRequest.getId();
WorkManager.getInstance().cancelByWorkId(myWorkId);
What else?
- Observing Work
- Task constraints
- Cancelling task
- Recurring tasks
// Work will run every 12 hours
new PeriodicWorkRequest.Builder photoWorkBuilder =
new PeriodicWorkRequest
.Builder(MyWorker.class, 12, TimeUnit.HOURS);
// Create the actual work object
PeriodicWorkRequest myWork =
photoWorkBuilder.build();
// Then enqueue the recurring task
WorkManager.getInstance().enqueue(myWork);
There’s more!
- Chaining work WorkManager.getInstance()
.beginWith(workA)
// beginWith() eturns a WorkContinuation object
.then(workB)
// then() returns new WorkContinuation instance
.then(workC)
.enqueue();
There’s more!
- Chaining work
- Input/Output data
setInputData(iData)
Data iData = new Data.Builder()
// We need to pass three integers: X, Y, and Z
.putInt(KEY_X_ARG, 42)
.putInt(KEY_Y_ARG, 421)
.build();
// Enqueue a OneTimeWorkRequest using those arguments
OneTimeWorkRequest mathWork = new
OneTimeWorkRequest.Builder(MathWorker.class)
.setInputData(iData)
.build();
There’s more!
- Chaining work
- Input/Output data
setOutputData(oData)
@Override
public Worker.Result doWork() {
// Fetch arguments (specify default values)
int x = getInputData().getInt(KEY_X_ARG, 0);
int y = getInputData().getInt(KEY_Y_ARG, 0);
// ...do the math...
int result = myCrazyMathFunction(x, y);
//...set the output, and we're done!
Data oData = new Data.Builder()
.putInt(KEY_RESULT, result)
.build();
setOutputData(oData);
return Result.SUCCESS;
}
Some more AAC are also there!
- Paging
- Data binding
Android Architecture Components Explained

Contenu connexe

Tendances

REST Versioning Architecture with ASP.NET MVC Web API v1.2
REST Versioning Architecture with ASP.NET MVC Web API v1.2REST Versioning Architecture with ASP.NET MVC Web API v1.2
REST Versioning Architecture with ASP.NET MVC Web API v1.2Rodrigo Ezequiel Liberoff V
 
Dart and Flutter Basics.pptx
Dart and Flutter Basics.pptxDart and Flutter Basics.pptx
Dart and Flutter Basics.pptxDSCVSSUT
 
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...Simplilearn
 
Intro to React Native Testing Library
Intro to React Native Testing LibraryIntro to React Native Testing Library
Intro to React Native Testing LibraryJosh Justice
 
Vert.x for Microservices Architecture
Vert.x for Microservices ArchitectureVert.x for Microservices Architecture
Vert.x for Microservices ArchitectureIdan Fridman
 
Introduction to Prometheus
Introduction to PrometheusIntroduction to Prometheus
Introduction to PrometheusJulien Pivotto
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Leonardo YongUk Kim
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Ryan Jarvinen
 
Distributed tracing using open tracing &amp; jaeger 2
Distributed tracing using open tracing &amp; jaeger 2Distributed tracing using open tracing &amp; jaeger 2
Distributed tracing using open tracing &amp; jaeger 2Chandresh Pancholi
 
Grafana introduction
Grafana introductionGrafana introduction
Grafana introductionRico Chen
 
BDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumBDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumLiraz Shay
 
C # (C Sharp).pptx
C # (C Sharp).pptxC # (C Sharp).pptx
C # (C Sharp).pptxSnapeSever
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationamscanne
 
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptxGrafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptxRomanKhavronenko
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesRamit Surana
 

Tendances (20)

REST Versioning Architecture with ASP.NET MVC Web API v1.2
REST Versioning Architecture with ASP.NET MVC Web API v1.2REST Versioning Architecture with ASP.NET MVC Web API v1.2
REST Versioning Architecture with ASP.NET MVC Web API v1.2
 
JUnit 5
JUnit 5JUnit 5
JUnit 5
 
Dart and Flutter Basics.pptx
Dart and Flutter Basics.pptxDart and Flutter Basics.pptx
Dart and Flutter Basics.pptx
 
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
 
Grafana
GrafanaGrafana
Grafana
 
Intro to React Native Testing Library
Intro to React Native Testing LibraryIntro to React Native Testing Library
Intro to React Native Testing Library
 
Vert.x for Microservices Architecture
Vert.x for Microservices ArchitectureVert.x for Microservices Architecture
Vert.x for Microservices Architecture
 
Introduction to Prometheus
Introduction to PrometheusIntroduction to Prometheus
Introduction to Prometheus
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래
 
Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17Hands-On Introduction to Kubernetes at LISA17
Hands-On Introduction to Kubernetes at LISA17
 
Distributed tracing using open tracing &amp; jaeger 2
Distributed tracing using open tracing &amp; jaeger 2Distributed tracing using open tracing &amp; jaeger 2
Distributed tracing using open tracing &amp; jaeger 2
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
Grafana introduction
Grafana introductionGrafana introduction
Grafana introduction
 
BDD with SpecFlow and Selenium
BDD with SpecFlow and SeleniumBDD with SpecFlow and Selenium
BDD with SpecFlow and Selenium
 
C # (C Sharp).pptx
C # (C Sharp).pptxC # (C Sharp).pptx
C # (C Sharp).pptx
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
BDD for APIs
BDD for APIsBDD for APIs
BDD for APIs
 
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptxGrafana Mimir and VictoriaMetrics_ Performance Tests.pptx
Grafana Mimir and VictoriaMetrics_ Performance Tests.pptx
 
Java Unit Testing
Java Unit TestingJava Unit Testing
Java Unit Testing
 
Achieving CI/CD with Kubernetes
Achieving CI/CD with KubernetesAchieving CI/CD with Kubernetes
Achieving CI/CD with Kubernetes
 

Similaire à Android Architecture Components Explained

Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...DroidConTLV
 
Drools & jBPM Info Sheet
Drools & jBPM Info SheetDrools & jBPM Info Sheet
Drools & jBPM Info SheetMark Proctor
 
Introduction to ejb and struts framework
Introduction to ejb and struts frameworkIntroduction to ejb and struts framework
Introduction to ejb and struts frameworks4al_com
 
important struts interview questions
important struts interview questionsimportant struts interview questions
important struts interview questionssurendray
 
MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCAnton Krasnoshchok
 
Advanced #6 clean architecture
Advanced #6  clean architectureAdvanced #6  clean architecture
Advanced #6 clean architectureVitali Pekelis
 
Introduction to j2 ee frameworks
Introduction to j2 ee frameworksIntroduction to j2 ee frameworks
Introduction to j2 ee frameworksMukesh Kumar
 
How Android Architecture Components can Help You Improve Your App’s Design?
How Android Architecture Components can Help You Improve Your App’s Design?How Android Architecture Components can Help You Improve Your App’s Design?
How Android Architecture Components can Help You Improve Your App’s Design?Paul Cook
 
Widgets - the Wookie project
Widgets - the Wookie projectWidgets - the Wookie project
Widgets - the Wookie projectscottw
 
Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013Edward Burns
 

Similaire à Android Architecture Components Explained (20)

Model viewviewmodel2
Model viewviewmodel2Model viewviewmodel2
Model viewviewmodel2
 
Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...Android architecture components - how they fit in good old architectural patt...
Android architecture components - how they fit in good old architectural patt...
 
MVC
MVCMVC
MVC
 
Stmik bandung
Stmik bandungStmik bandung
Stmik bandung
 
Struts 1
Struts 1Struts 1
Struts 1
 
Struts Ppt 1
Struts Ppt 1Struts Ppt 1
Struts Ppt 1
 
Struts course material
Struts course materialStruts course material
Struts course material
 
Drools & jBPM Info Sheet
Drools & jBPM Info SheetDrools & jBPM Info Sheet
Drools & jBPM Info Sheet
 
Struts ppt 1
Struts ppt 1Struts ppt 1
Struts ppt 1
 
Introduction to ejb and struts framework
Introduction to ejb and struts frameworkIntroduction to ejb and struts framework
Introduction to ejb and struts framework
 
Struts
StrutsStruts
Struts
 
important struts interview questions
important struts interview questionsimportant struts interview questions
important struts interview questions
 
Android
AndroidAndroid
Android
 
MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVC
 
Advanced #6 clean architecture
Advanced #6  clean architectureAdvanced #6  clean architecture
Advanced #6 clean architecture
 
Introduction to j2 ee frameworks
Introduction to j2 ee frameworksIntroduction to j2 ee frameworks
Introduction to j2 ee frameworks
 
How Android Architecture Components can Help You Improve Your App’s Design?
How Android Architecture Components can Help You Improve Your App’s Design?How Android Architecture Components can Help You Improve Your App’s Design?
How Android Architecture Components can Help You Improve Your App’s Design?
 
Widgets - the Wookie project
Widgets - the Wookie projectWidgets - the Wookie project
Widgets - the Wookie project
 
Azure migration
Azure migrationAzure migration
Azure migration
 
Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013
 

Dernier

ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 

Dernier (20)

ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 

Android Architecture Components Explained