{"id":3406,"date":"2017-08-24T09:19:09","date_gmt":"2017-08-24T08:19:09","guid":{"rendered":"https:\/\/www.inovex.de\/blog\/?p=3406"},"modified":"2025-01-06T11:42:30","modified_gmt":"2025-01-06T10:42:30","slug":"android-architecture-components","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/","title":{"rendered":"Simplifying the Android developer&#8217;s life with Architecture Components"},"content":{"rendered":"<p>Some weeks ago at the I\/O 2017 Google announced that they are working on architecture components to make the Android developers&#8216; life easier.\u00a0They released a bunch of libraries which are supposed to take care of the lifecycle and suggest an architecture to\u00a0rely on when developing an app. Despite the libraries not being considered stable by now, the community has been pretty excited about this\u00a0and is adapting to it already. And indeed the libraries are working pretty stable already, some APIs might change though due to community feedback. Let&#8217;s have a closer look!<!--more--><\/p>\n<p>So what&#8217;s so interesting about <a href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/index.html\" target=\"_blank\" rel=\"noopener\">these components<\/a> to raise that\u00a0much attention? The answer is pretty obvious once you know the initial idea. The team behind the project talks about this in\u00a0the Android Developer Backstage Podcast (Episode 72: Architecture Components 1 &#8211; Lifecycle). They started interviewing developers about their major pain points developing for Android. It became pretty clear that it&#8217;s always the same issues people are struggling with for\u00a0years. Amongst them the complicated lifecycle, a missing unified architecture and a simple persistence layer to keep the UI\u00a0in sync with data updates during configuration changes.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#Architecture\" >Architecture<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#LiveData\" >LiveData<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#Room\" >Room<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#Sum-up\" >Sum up<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Architecture\"><\/span>Architecture<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>For a long time Google\u00a0avoided to make a statement about a preferred architecture and basically went with the idea &#8222;Do whatever you want&#8220;. As a result people ended up using a lot of different patterns to write apps\u00a0over the last few years. Some popular ones are\u00a0MVC, MVP, MVI, Redux or MVVM to name just a few\u00a0of them. Each of them is fitting the Android environment more or less and has its\u00a0pros and cons.<\/p>\n<p>Now, with their new libraries, Google is finally suggesting a unified architecture. They designed it based on their idea how apps should be developed.<\/p>\n<p>What Google is proposing is pretty close to the MVVM model which became pretty popular. The idea is that every view, which can be an activity or fragment for example, has a corresponding <code>ViewModel<\/code>. The model takes care of all the &#8222;hard work&#8220; like processing user input, updating data and so on.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3407\" src=\"https:\/\/www.inovex.de\/blog\/wp-content\/uploads\/2017\/07\/MVVM-300x103.png\" alt=\"\" width=\"778\" height=\"267\" \/><\/p>\n<p>There is a class called <code>ViewModel<\/code>\u00a0in the libraries which can be extended to implement the pattern. It has\u00a0quite some nice features: An instantiated object survives configuration changes for example and you get\u00a0pretty unit-testable code.\u00a0Depending on the complexity of the project there can be another layer, the <code>DataModel<\/code>. It takes care of providing\u00a0all the data. Most of the time there is more than one data source. For example a web service\u00a0providing data which are stored in a database for later usage.<\/p>\n<p>The\u00a0<code>DataModel<\/code>\u00a0decides where the requested information\u00a0should be taken from and provides it\u00a0to the <code>ViewModel.<\/code><\/p>\n<h2><span class=\"ez-toc-section\" id=\"LiveData\"><\/span>LiveData<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Using\u00a0the ViewModel pattern you quickly reach\u00a0the point where you start thinking about\u00a0the best way to communicate between the view and the model.\u00a0Especially in the early days of Android development it had been a problem to know when to update the view. There were for example\u00a0app crashes because an async task had only finished when the app was already in the background and the view was destroyed.<\/p>\n<p>Since then there have been a lot of different solutions for this problem (RxJava to\u00a0the rescue!). With the architecture components Google is working on something called LiveData to fix this once and for all. It&#8217;s a data holder class which allows a consumer to observe the data\u00a0every time the object\u00a0is updated. Furthermore\u00a0LiveData respects the lifecycle. This means\u00a0the LiveData object will only update the View\u00a0as long as it is in an active state (<code>STARTED<\/code>\u00a0or <code>RESUMED<\/code>). This state is updated every time a lifecycle event happens.<\/p>\n<p>Using it is fairly simple. Let&#8217;s assume we have a view which shows a list of jokes and the view model providing a list with data; it looks like this:<\/p>\n<pre class=\"lang:java decode:true\" title=\"JokeViewModel which provides jokes\">public class JokesViewModel extends ViewModel {\r\n\r\n    private MutableLiveData&lt;List&lt;Joke&gt;&gt; jokeLiveData;\r\n\r\n    public LiveData&lt;List&lt;Joke&gt;&gt; getJokes() {\r\n\r\n        if (jokeLiveData == null) {\r\n\r\n            jokeLiveData = new MutableLiveData&lt;&gt;();\r\n\r\n            loadJokes();\r\n\r\n        }\r\n\r\n        return jokeLiveData;\r\n\r\n    }\r\n\r\n    private void loadJokes() {\r\n\r\n       List&lt;Joke&gt; jokes = new ArrayList();\r\n\r\n       jokes.add(new Joke(\"funny joke\");\r\n\r\n       jokeLiveData.setValue(jokes);\r\n\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<p>Having this we can register the view to updates from the ViewModel:<\/p>\n<pre class=\"lang:java decode:true\" title=\"observe updates provided by the ViewModel\">JokesViewModel jokesViewModel = ViewModelProviders.of(this, viewModelFactory).get(JokesViewModel.class);\r\n\r\njokesViewModel.getInitialJokes().observe(this, jokes -&gt; {\r\n\r\n      jokeAdapter.setJokesList(jokes);\r\n\r\n});<\/pre>\n<p>And that&#8217;s it. Now every time some method calls\u00a0<code>jokeLiveData.setValue<\/code> the view will be updated if it is still active. As mentioned before there is another advantage provided by the ViewModel. It survives configuration changes. So when the device is rotated and goes through the lifecycle, the state is kept and the screen will get the data\u00a0once it is rebuilt. But be careful, there&#8217;s one thing to take into account: The model does not survive activity recreation. So when the activity gets destroyed by the system while your app is in the background, the data is lost. You&#8217;ll have to come up\u00a0with a solution to save and restore\u00a0the state in <code>onSaveInstanceState\/onRestoreInstanceState<\/code>. The data itself is ideally persisted in a database anyways. There already are plenty of frameworks to deal with persistence like Realm or GreenDao for example. Google just introduced\u00a0a solution called Room which is shipped with the architecture components as well.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Room\"><\/span>Room<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Room is a persistence library providing an abstraction layer over SQLite. The usage is quite simple. Going back to the Jokes example an entity looks like this:<\/p>\n<pre class=\"lang:java decode:true \" title=\"Simple Room Entity\">@Entity(tableName = \"jokes\")\r\n\r\npublic class Joke {\r\n\r\n    @PrimaryKey\r\n\r\n    @ColumnInfo(name = \"jokeid\")\r\n\r\n    private String id;\r\n\r\n    @ColumnInfo(name = \"joke\")\r\n\r\n    private String joke;\r\n\r\n    public Joke(String id, String joke) {\r\n\r\n        this.id = id;\r\n\r\n        this.joke = joke;\r\n\r\n    }\r\n\r\n    public String getJoke() {\r\n\r\n        return joke;\r\n\r\n    }\r\n\r\n    public String getId() {\r\n\r\n        return id;\r\n\r\n    }\r\n\r\n}<\/pre>\n<p>It contains a primary key, which is required and another field containing the joke. To access the data an interface is created and implemented:<\/p>\n<pre class=\"lang:java decode:true \" title=\"Accessing Data with Room\">@Dao\r\n\r\npublic interface JokeDao {\r\n\r\n    @Query(\"SELECT * FROM jokes\")\r\n\r\n    Flowable&lt;List&lt;Joke&gt;&gt; getJokes();\r\n\r\n    @Insert(onConflict = OnConflictStrategy.REPLACE)\r\n\r\n    void insertJoke(Joke user);\r\n\r\n    @Query(\"DELETE FROM jokes\")\r\n\r\n    void deleteAllJokes();\r\n\r\n}\r\n\r\npublic class LocalJokeDataSource implements JokeDataSource {\r\n\r\n    private final JokeDao jokeDao;\r\n\r\n    public LocalJokeDataSource(JokeDao jokeDao) {\r\n\r\n        this.jokeDao = jokeDao;\r\n\r\n    }\r\n\r\n    @Override\r\n\r\n    public Flowable&lt;List&lt;Joke&gt;&gt; getJokes() {\r\n\r\n        return jokeDao.getJokes();\r\n\r\n    }\r\n\r\n    @Override\r\n\r\n    public void insertOrUpdateJoke(Joke joke) {\r\n\r\n        jokeDao.insertJoke(joke);\r\n\r\n    }\r\n\r\n    @Override\r\n\r\n    public void deleteAllJokes() {\r\n\r\n        jokeDao.deleteAllJokes();\r\n\r\n    }\r\n\r\n}\r\n\r\n<\/pre>\n<p>Room provides RxJava support and offers <code>Flowable<\/code> directly as a return value, which is pretty nice. For the last step\u00a0you need to get an instance of the database\u00a0which should be a singleton that is shared across the app.<\/p>\n<pre class=\"lang:java decode:true\" title=\"Creating the Room database\">@Database(entities = {Joke.class}, version = 1)\r\n\r\npublic abstract class JokesDatabase extends RoomDatabase {\r\n\r\n    private static JokesDatabase INSTANCE;\r\n\r\n    public abstract JokeDao jokeDao();\r\n\r\n    public static JokesDatabase getInstance(Context context) {\r\n\r\n        if(INSTANCE == null) {\r\n\r\n            synchronized (JokesDatabase.class) {\r\n\r\n                if(INSTANCE == null) {\r\n\r\n                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),\r\n\r\n                        JokesDatabase.class, \"sample.db\").build();\r\n\r\n                }\r\n\r\n            }\r\n\r\n        }\r\n\r\n        return INSTANCE;\r\n\r\n    }\r\n\r\n}<\/pre>\n<p>As you can see the usage is pretty straightforward and easy to start with. With the latest version of Android Studio, the queries are already checked during compile time, which allows to show errors already in the IDE. And that&#8217;s it, now we have all the tools needed for handling a clean lifecycle, managing configuration changes and persisting the data.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Sum-up\"><\/span>Sum up<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Google is providing some very useful components which can make the developers&#8216; life a lot easier by tackling the biggest pain points in daily\u00a0Android programming. But that does not mean that every existing app needs to\u00a0be updated and migrated to use these components. They merely provide one way to solve problems you usually stumble upon while developing an app.\u00a0If there already is a working solution implemented based on a working architecture, there is no need to change anything about it. In my opinion it is better to have one consistent architecture than several different ones which are applied in different places of the project, as this\u00a0makes the code harder to understand and difficult to maintain.<\/p>\n<p>To sum up it is definitely worth taking a look at the components. It feels like something that should have been around for years, as it can really speed up development. Despite being in an alpha stage the libraries are pretty stable and also\u00a0fun to play with.\u00a0Many developers already started to adopt it which means that sooner or later it can be seen in a lot of apps so it&#8217;s better to not miss out on it. They are a good starting point for a new project to create a scalable,\u00a0testable and structured app while also saving time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Some weeks ago at the I\/O 2017 Google announced that they are working on architecture components to make the Android developers&#8216; life easier.\u00a0They released a bunch of libraries which are supposed to take care of the lifecycle and suggest an architecture to\u00a0rely on when developing an app. Despite the libraries not being considered stable by [&hellip;]<\/p>\n","protected":false},"author":60,"featured_media":13098,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[510],"service":[420],"coauthors":[{"id":60,"display_name":"Andreas Bauer","user_nicename":"abauer"}],"class_list":["post-3406","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-apps-2","service-apps"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Simplifying the Android developer&#039;s life with Architecture Components<\/title>\n<meta name=\"description\" content=\"Let&#039;s take a look at Android architecture components announced at Google I\/O 2017 to make the Android developers&#039; lives easier.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simplifying the Android developer&#039;s life with Architecture Components\" \/>\n<meta property=\"og:description\" content=\"Let&#039;s take a look at Android architecture components announced at Google I\/O 2017 to make the Android developers&#039; lives easier.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2017-08-24T08:19:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-06T10:42:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andreas Bauer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component-1024x576.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andreas Bauer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Andreas Bauer\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/\"},\"author\":{\"name\":\"Andreas Bauer\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/1e32c55150415f2219308d3ddfb18f2b\"},\"headline\":\"Simplifying the Android developer&#8217;s life with Architecture Components\",\"datePublished\":\"2017-08-24T08:19:09+00:00\",\"dateModified\":\"2025-01-06T10:42:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/\"},\"wordCount\":1193,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png\",\"keywords\":[\"Apps\"],\"articleSection\":[\"Applications\",\"English Content\",\"General\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/\",\"url\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/\",\"name\":\"Simplifying the Android developer's life with Architecture Components\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png\",\"datePublished\":\"2017-08-24T08:19:09+00:00\",\"dateModified\":\"2025-01-06T10:42:30+00:00\",\"description\":\"Let's take a look at Android architecture components announced at Google I\/O 2017 to make the Android developers' lives easier.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png\",\"width\":1920,\"height\":1080,\"caption\":\"Android Architecture Components Headerbild\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.inovex.de\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Simplifying the Android developer&#8217;s life with Architecture Components\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.inovex.de\/de\/#website\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.inovex.de\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/inovexde\",\"https:\/\/x.com\/inovexgmbh\",\"https:\/\/www.instagram.com\/inovexlife\/\",\"https:\/\/www.linkedin.com\/company\/inovex\",\"https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/1e32c55150415f2219308d3ddfb18f2b\",\"name\":\"Andreas Bauer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/16b31119f143104995dca6abbad792ef\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/Portrait-Andreas-Bauer-96x96.jpg\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/Portrait-Andreas-Bauer-96x96.jpg\",\"caption\":\"Andreas Bauer\"},\"description\":\"Mobile Entwicklung mit Android und Flutter. Hat mit Android-Entwicklung zu Version 2.2 und mit Eclipse begonnen. Ist immer wieder erstaunt \u00fcber die Leistungsf\u00e4higkeit moderner mobiler Ger\u00e4te.\",\"url\":\"https:\/\/www.inovex.de\/de\/blog\/author\/abauer\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Simplifying the Android developer's life with Architecture Components","description":"Let's take a look at Android architecture components announced at Google I\/O 2017 to make the Android developers' lives easier.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/","og_locale":"de_DE","og_type":"article","og_title":"Simplifying the Android developer's life with Architecture Components","og_description":"Let's take a look at Android architecture components announced at Google I\/O 2017 to make the Android developers' lives easier.","og_url":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2017-08-24T08:19:09+00:00","article_modified_time":"2025-01-06T10:42:30+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png","type":"image\/png"}],"author":"Andreas Bauer","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component-1024x576.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Andreas Bauer","Gesch\u00e4tzte Lesezeit":"7\u00a0Minuten","Written by":"Andreas Bauer"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/"},"author":{"name":"Andreas Bauer","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/1e32c55150415f2219308d3ddfb18f2b"},"headline":"Simplifying the Android developer&#8217;s life with Architecture Components","datePublished":"2017-08-24T08:19:09+00:00","dateModified":"2025-01-06T10:42:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/"},"wordCount":1193,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png","keywords":["Apps"],"articleSection":["Applications","English Content","General"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/","url":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/","name":"Simplifying the Android developer's life with Architecture Components","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png","datePublished":"2017-08-24T08:19:09+00:00","dateModified":"2025-01-06T10:42:30+00:00","description":"Let's take a look at Android architecture components announced at Google I\/O 2017 to make the Android developers' lives easier.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/08\/android-component.png","width":1920,"height":1080,"caption":"Android Architecture Components Headerbild"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/android-architecture-components\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Simplifying the Android developer&#8217;s life with Architecture Components"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/1e32c55150415f2219308d3ddfb18f2b","name":"Andreas Bauer","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/16b31119f143104995dca6abbad792ef","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/Portrait-Andreas-Bauer-96x96.jpg","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Portrait-Andreas-Bauer-96x96.jpg","caption":"Andreas Bauer"},"description":"Mobile Entwicklung mit Android und Flutter. Hat mit Android-Entwicklung zu Version 2.2 und mit Eclipse begonnen. Ist immer wieder erstaunt \u00fcber die Leistungsf\u00e4higkeit moderner mobiler Ger\u00e4te.","url":"https:\/\/www.inovex.de\/de\/blog\/author\/abauer\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/3406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=3406"}],"version-history":[{"count":2,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/3406\/revisions"}],"predecessor-version":[{"id":60285,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/3406\/revisions\/60285"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/13098"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=3406"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=3406"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=3406"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=3406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}