<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2286884684117686990</id><updated>2024-09-09T15:54:20.305-07:00</updated><category term="RxAndroid"/><category term="Tab"/><category term="TabActivity"/><category term="TabHost"/><category term="TabSpec"/><category term="Observable"/><category term="RxJava"/><category term="error"/><category term="9-Patch"/><category term="Android Market 링크방법"/><category term="AndroidManifest.xml"/><category term="AsyncTask"/><category term="Debug certificate expired on"/><category term="Environment"/><category term="From"/><category term="Google Translate"/><category term="INSTALL_FAILED_SHARED_USER_INCOMPATIBLE"/><category term="LVL"/><category term="License Verification Library"/><category term="NinePatch"/><category term="Proguard"/><category term="Query"/><category term="Rokon"/><category term="RokonActivity"/><category term="Rotation"/><category term="RxLifecycle"/><category term="Screen Resolution"/><category term="Screen Size"/><category term="Translate"/><category term="Unparsed"/><category term="android excel"/><category term="android sdk"/><category term="android source"/><category term="asset"/><category term="bin"/><category term="details"/><category term="excel"/><category term="frameworks"/><category term="git"/><category term="jxl"/><category term="libs"/><category term="managedQuery"/><category term="market"/><category term="packageName"/><category term="res"/><category term="scheduler"/><category term="screenOrientation"/><category term="sdcard"/><category term="search"/><category term="setRequestedOrientation"/><category term="sharedUserId"/><category term="src"/><category term="svn"/><category term="workbook"/><category term="나인패치"/><category term="Adapter"/><category term="Android BADGE"/><category term="AsyncSubject"/><category term="BehaviorSubject"/><category term="Binding Reset"/><category term="Butter Knife"/><category term="CompositeSubscription"/><category term="Connect"/><category term="Connectable"/><category term="Empty"/><category term="FlatMap"/><category term="IO"/><category term="Interval"/><category term="Listener Binding"/><category term="Multi-Method Listeners"/><category term="Never"/><category term="Non-Activity Binding"/><category term="OnErrorResumeNext"/><category term="Optional Bindings"/><category term="PublishSubject"/><category term="Range"/><category term="Reactive Extensions"/><category term="Replay"/><category term="ReplaySubject"/><category term="Resource Binding"/><category term="Retry"/><category term="RetryWhen"/><category term="RxBinding"/><category term="Screen Capture"/><category term="ShortcutBadger"/><category term="SqlBrite"/><category term="Subject"/><category term="Subscription"/><category term="Switch"/><category term="TiMER"/><category term="Translucent"/><category term="Transparent"/><category term="android-flowlayout"/><category term="annotation"/><category term="bind"/><category term="butterknife"/><category term="combineLatest"/><category term="compose"/><category term="computation"/><category term="create"/><category term="createWorker"/><category term="debounce"/><category term="defer"/><category term="filter"/><category term="flowlayout"/><category term="immediate"/><category term="just"/><category term="jxl.jar"/><category term="mainThread"/><category term="map"/><category term="merge"/><category term="newThread"/><category term="observeOn"/><category term="onError"/><category term="onErrorReturn"/><category term="operator"/><category term="publish"/><category term="reactivex"/><category term="refCount"/><category term="repeat"/><category term="repeatWhen"/><category term="rx"/><category term="rx-preferences"/><category term="shinebutton"/><category term="shortcut"/><category term="startWith"/><category term="subscriber"/><category term="subsctibeOn"/><category term="trampoline"/><category term="zip"/><category term="뱃지"/><category term="버터나이프"/><category term="아이콘 뱃지"/><category term="폭죽"/><category term="폭죽이 터지는 듯한 효과"/><category term="효과"/><title type='text'>JOONRYANG..forever</title><subtitle type='html'>IT Development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>66</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-3857982460345601255</id><published>2017-07-11T03:33:00.002-07:00</published><updated>2017-07-11T03:33:41.264-07:00</updated><title type='text'>Android Image Search Application!!</title><content type='html'>&lt;br /&gt;
Tools to easily search and download images to the Internet quickly and easily.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;ANDROID APPLICATION : IMAGE SEARCH&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;URL :&amp;nbsp;https://play.google.com/store/apps/details?id=com.study.free.imagesearch&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
You can easily and quickly search for images using the Google search engine.&lt;br /&gt;
Search for things you do not know about &quot;flowers, cars, etc.&quot; through the Google search engine.&lt;br /&gt;
(The &quot;Storage, Location, Camera&quot; function permission is required for image search.)&lt;br /&gt;
&lt;br /&gt;
How to use:&lt;br /&gt;
&amp;nbsp; 1. Search through the images on the phone&lt;br /&gt;
&amp;nbsp; 2. Search for images by taking a camera from a phone&lt;br /&gt;
&lt;br /&gt;
Characteristic:&lt;br /&gt;
&amp;nbsp; 1. Easy-to-use UI interface&lt;br /&gt;
&amp;nbsp; 2. Using the Google Image Search Engine&lt;br /&gt;
&amp;nbsp; 3. After image search, &quot;Download Image, Share, URL Copy ... &quot;Providing more features&lt;br /&gt;
&lt;br /&gt;
If you have any problems or need improvement, please contact us at the email address below.&lt;br /&gt;
We will improve.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2ktq0JvbQZVXEZLffgVs5umPOM8ibCJ-g1oAU_070fle5Es-KkKLipHUKV-LUaY9qSYpkn5QowEfGBhPFXB1wbP3at0b3L2dlWtHwAvRZ6uuLQpTBgyvRGDvJtpODHALtgETIVaz_dd8/s1600/070914101923206-iloveimg-resized+%25281%2529-iloveimg-cropped.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;481&quot; data-original-width=&quot;1024&quot; height=&quot;150&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2ktq0JvbQZVXEZLffgVs5umPOM8ibCJ-g1oAU_070fle5Es-KkKLipHUKV-LUaY9qSYpkn5QowEfGBhPFXB1wbP3at0b3L2dlWtHwAvRZ6uuLQpTBgyvRGDvJtpODHALtgETIVaz_dd8/s320/070914101923206-iloveimg-resized+%25281%2529-iloveimg-cropped.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJ9kVBQ6gQDZexYo1bf9-AJqCpuukbcdcu9l4ycRLmmd1RGyD3x2o7Gzn4vTMeHjwROXstVRKvqimCqAnC7H-GCzJOrJS5on3tlxmtqKjRbFrRYyJqufFAPjwHJVkUsQ_V4Eq034VNcQ/s1600/Screenshot_2017-07-09-13-47-49-iloveimg-cropped.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;935&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJ9kVBQ6gQDZexYo1bf9-AJqCpuukbcdcu9l4ycRLmmd1RGyD3x2o7Gzn4vTMeHjwROXstVRKvqimCqAnC7H-GCzJOrJS5on3tlxmtqKjRbFrRYyJqufFAPjwHJVkUsQ_V4Eq034VNcQ/s200/Screenshot_2017-07-09-13-47-49-iloveimg-cropped.png&quot; width=&quot;116&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjmXjAYfukDtCZHhP9eknt2EsOuHIW2783JVhJqtMu8Czv-upp-nkAyx51iCip7QE5eZmoEZLiC8UKEOul5c5TEesPfiV7ZSZ_wED0JsAd3K9QibD_lL5WHpEAruQpYWV9k7_-XROwAF0/s1600/Screenshot_2017-07-09-13-48-17-iloveimg-cropped.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;935&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjmXjAYfukDtCZHhP9eknt2EsOuHIW2783JVhJqtMu8Czv-upp-nkAyx51iCip7QE5eZmoEZLiC8UKEOul5c5TEesPfiV7ZSZ_wED0JsAd3K9QibD_lL5WHpEAruQpYWV9k7_-XROwAF0/s200/Screenshot_2017-07-09-13-48-17-iloveimg-cropped.png&quot; width=&quot;116&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGolbZI_JBXe7Zt8oo63YyyF6jn767q1tSgo4UzcHBT_hQot97tynmok3Pck1nKEKVK6fhCN8Ctof-Zpvj116V55UkmL7Var3f012lF4zfUA-oOdfSQzL-gezcJ8dSHDUciiqCAN_hjWU/s1600/Screenshot_2017-07-09-13-50-13-iloveimg-cropped.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;941&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGolbZI_JBXe7Zt8oo63YyyF6jn767q1tSgo4UzcHBT_hQot97tynmok3Pck1nKEKVK6fhCN8Ctof-Zpvj116V55UkmL7Var3f012lF4zfUA-oOdfSQzL-gezcJ8dSHDUciiqCAN_hjWU/s200/Screenshot_2017-07-09-13-50-13-iloveimg-cropped.png&quot; width=&quot;117&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhyphenhyphenMdRlAssAk6taa3xThhcHSZTJJbhNjDgNam-h5wF9RBx8uq5r5KdoLAn9Grm7tnQI35D81hDCZj_Cz-SxTUHm_EIxgyi7cQG8ILDzV-Bk4ER1Vn85aORKyP6s-Cv53mdsuyZrm2jIAg/s1600/Screenshot_2017-07-09-13-50-30-iloveimg-cropped.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;935&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhyphenhyphenMdRlAssAk6taa3xThhcHSZTJJbhNjDgNam-h5wF9RBx8uq5r5KdoLAn9Grm7tnQI35D81hDCZj_Cz-SxTUHm_EIxgyi7cQG8ILDzV-Bk4ER1Vn85aORKyP6s-Cv53mdsuyZrm2jIAg/s200/Screenshot_2017-07-09-13-50-30-iloveimg-cropped.png&quot; width=&quot;116&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1J9aBKrnCKq4cUCxorotYxsyPm4xYPiFtO2Uk0gRq4bN-p0PHlLGm_MMYaDztdC81IKGKGcF_iLpZU7GNi4rXs7sWBmId95kvLDs_Qyv2Q_pB30CVL7uMvFhnJp2TuezgzQMsdgH1tJQ/s1600/Screenshot_2017-07-09-13-50-45-iloveimg-cropped.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;935&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1J9aBKrnCKq4cUCxorotYxsyPm4xYPiFtO2Uk0gRq4bN-p0PHlLGm_MMYaDztdC81IKGKGcF_iLpZU7GNi4rXs7sWBmId95kvLDs_Qyv2Q_pB30CVL7uMvFhnJp2TuezgzQMsdgH1tJQ/s200/Screenshot_2017-07-09-13-50-45-iloveimg-cropped.png&quot; width=&quot;116&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span id=&quot;goog_1643534185&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1643534186&quot;&gt;&lt;/span&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/3857982460345601255/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/07/android-image-search-application.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/3857982460345601255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/3857982460345601255'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/07/android-image-search-application.html' title='Android Image Search Application!!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2ktq0JvbQZVXEZLffgVs5umPOM8ibCJ-g1oAU_070fle5Es-KkKLipHUKV-LUaY9qSYpkn5QowEfGBhPFXB1wbP3at0b3L2dlWtHwAvRZ6uuLQpTBgyvRGDvJtpODHALtgETIVaz_dd8/s72-c/070914101923206-iloveimg-resized+%25281%2529-iloveimg-cropped.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-5263371772623822092</id><published>2017-07-10T18:22:00.001-07:00</published><updated>2017-07-10T18:22:02.774-07:00</updated><title type='text'>[Image Search Application] 사용된 이미지 출처 및 원 저자작자 표시</title><content type='html'>&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Image Search Application&quot; Used image source and original author&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;[Picture Search Icon]&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
Author:&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Lokas Software&lt;br /&gt;
License: CC Attribution 3.0 Unported&lt;br /&gt;
Readme file&lt;br /&gt;
Commercial usage: &amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Allowed&lt;br /&gt;
WebSite : http://www.softicons.com/toolbar-icons/soft-icons-by-lokas-software/picture-search-icon&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;
&lt;b&gt;&lt;i&gt;[Vintage Cameras Image]&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
sername: birdwellphotos&lt;br /&gt;
Name: Wilma Birdwell&lt;br /&gt;
Location: Red Boiling Springs / TN / United States&lt;br /&gt;
WebSite : http://www.freephotosbank.com/12443.html&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;[frame Image]&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
Jessica Ruscello(Marin County, Californiamonkontheroad.com)&lt;br /&gt;
MAKE : Nikon&lt;br /&gt;
MODEL : NIKON D5500&lt;br /&gt;
SHUTTER SPEED : 1/4000s&lt;br /&gt;
APERTURE : ƒ/5.0&lt;br /&gt;
FOCAL LENGTH : 40mm&lt;br /&gt;
ISO : 400&lt;br /&gt;
PUBLISHED ON : June 5, 2016&lt;br /&gt;
DIMENSIONS : 6000 × 4000&lt;br /&gt;
WebSite : https://unsplash.com/search/frame?photo=-GUyf8ZCTHM</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5263371772623822092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5263371772623822092'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/07/image-search-application.html' title='[Image Search Application] 사용된 이미지 출처 및 원 저자작자 표시'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-4345835361084815439</id><published>2017-07-10T18:03:00.000-07:00</published><updated>2017-07-10T18:03:20.738-07:00</updated><title type='text'>&quot;Image Search&quot; Personal Information Processing Policy(&quot;Image Search&quot; 개인정보처리방침)</title><content type='html'>&lt;i&gt;[English Version]================================&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;[&quot;Image Search&quot; Personal Information Processing Policy]&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The user needs the following access rights within the &quot;Image Search&quot; application.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;1. Camera (android.permission.CAMERA)&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;The purpose of requesting access to the camera is to provide Google Image Search.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;It is to take a picture with the camera, and to find the same image or letter of the picture.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Please note that the Image Search application is not being used for any purpose other than the above purpose.&lt;br /&gt;
Also, when you use the feature, your personal information is not collected by the developer.&lt;br /&gt;
The collected user information will be sent to Google&#39;s image recognition server, but technically developers will not have access to their personal information.&lt;br /&gt;
&lt;br /&gt;
Thank you.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;[Korean Version]================================&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;[&quot;Image Search&quot; 개인정보처리방침]&lt;/b&gt;&lt;br /&gt;
Image Search 어플 내에서 다음과 같은 접근 권한을 사용자에게 요구합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.카메라(android.permission.CAMERA)&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; 카메라에 접근 권한을 요구하는 목적은 Google Image Search 기능을 제공하기 위해서 입니다.&lt;br /&gt;
&amp;nbsp; 카메라로 사진을 찍어서, 사진의 같은 이미지 or 문자 등 정보를 찾기 위해서 입니다.&lt;br /&gt;
&lt;br /&gt;
Image Search 어플은 위 목적이외에는 다른 목적으로 사용되고 있지 않고 있음을 알려드립니다.&lt;br /&gt;
또한 기능 사용 시, 개인정보를 개발자가 수집 하지 않습니다.&lt;br /&gt;
수집된 사용자 정보는 Google의 이미지 인식 서버로 전송될 뿐, 기술적으로 개발자는 개인정보에 접근 불가능 합니다.&lt;br /&gt;
&lt;br /&gt;
감사합니다.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4345835361084815439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4345835361084815439'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/07/image-search-personal-information.html' title='&quot;Image Search&quot; Personal Information Processing Policy(&quot;Image Search&quot; 개인정보처리방침)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-8062333875633719518</id><published>2017-06-04T23:25:00.001-07:00</published><updated>2017-06-04T23:25:27.340-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="shinebutton"/><category scheme="http://www.blogger.com/atom/ns#" term="폭죽"/><category scheme="http://www.blogger.com/atom/ns#" term="폭죽이 터지는 듯한 효과"/><category scheme="http://www.blogger.com/atom/ns#" term="효과"/><title type='text'>[STUDY] Android &quot;shinebutton&quot; 라이브러리 소개</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
[목차]======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;1. Android ShineButton 소개&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;2. ShineButton 라이브러리 정보&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; 1) 라이브러리 다운로드 주소&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; 2) Installation and usage&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; 3) License&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
===========================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Android&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;ShineButton&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;소개&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
버튼을 클릭하면 폭죽이 터지는 듯한 효과를 제공하는 라이브러리로 아래 그림 같은 효과를 제공한다.&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box; color: #24292e; font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; margin-bottom: 16px;&quot;&gt;
This is a UI lib for Android. Effects like shining.&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box; color: #24292e; font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; margin-bottom: 16px;&quot;&gt;
&lt;a href=&quot;https://github.com/ChadCSong/ShineButton/blob/master/demo_shine_others.gif&quot; style=&quot;border-bottom: 1px dashed rgb(132, 0, 0); box-sizing: border-box; color: #0366d6; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;preview&quot; src=&quot;https://github.com/ChadCSong/ShineButton/raw/master/demo_shine_others.gif&quot; style=&quot;border-style: none; box-sizing: content-box; max-width: 100%;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;ShineButton&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;라이브러리 정보&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;&amp;nbsp; 1) 라이브러리 다운로드 주소&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;https://github.com/ChadCSong/ShineButton&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 2)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Installation and usage&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;&lt;/ul&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Maven&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;lt;groupId&amp;gt;com.sackcentury&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;lt;artifactId&amp;gt;shinebutton&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;lt;version&amp;gt;0.1.7&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;lt;type&amp;gt;aar&amp;lt;/type&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Gradle&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;buildscript {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; repositories {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mavenCentral()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;dependencies {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; compile &#39;com.sackcentury:shinebutton:0.1.7&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Usage&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;shineButton = (ShineButton) findViewById(R.id.shine_button);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;shineButton.init(activity);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
or&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;ShineButton shineButtonJava = new ShineButton(this);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;shineButtonJava.setBtnColor(Color.GRAY);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;shineButtonJava.setBtnFillColor(Color.RED);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;shineButtonJava.setShapeResource(R.raw.heart);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;shineButtonJava.setAllowRandomColor(true);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;shineButtonJava.setLayoutParams(layoutParams);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;if (linearLayout != null) {&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;linearLayout.addView(shineButtonJava);&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;iOS lib fave-button Android implement. FaveButton was inspired by Twitter’s Like Heart Animation;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 3) License&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
The MIT License (MIT)&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Copyright (c) 2016 Chad Song&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Permission is hereby granted, free of charge, to any person obtaining a copy&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
of this software and associated documentation files (the &quot;Software&quot;), to deal&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
in the Software without restriction, including without limitation the rights&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
copies of the Software, and to permit persons to whom the Software is&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
furnished to do so, subject to the following conditions:&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
The above copyright notice and this permission notice shall be included in all&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
copies or substantial portions of the Software.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
SOFTWARE.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em style=&quot;box-sizing: border-box; color: #333333; font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; text-align: justify;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;출처 : 인터넷에서 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; text-align: justify;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/8062333875633719518/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-android-shinebutton.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8062333875633719518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8062333875633719518'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-android-shinebutton.html' title='[STUDY] Android &quot;shinebutton&quot; 라이브러리 소개'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-9139864617664446422</id><published>2017-06-04T23:10:00.002-07:00</published><updated>2017-06-04T23:10:59.963-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android-flowlayout"/><category scheme="http://www.blogger.com/atom/ns#" term="flowlayout"/><title type='text'>[STUDY] Android &quot;android-flowlayout&quot; 라이브러리 소개</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
[목차]===========================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;1.&amp;nbsp;android-flowlayout 소개&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;2. android-flowlayout 라이브러리 정보&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; 1) 라이브러리 다운로드 주소&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; 2) Installation and usage&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; 3) Detailed parameters&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; 4) License&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
================================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1.&amp;nbsp;android-flowlayout 소개&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;자바 GUI에는 FlowLayout이라는 유용한 레이아웃이 있는데, 안드로이드에는 없어서 만들어진 오픈소스입니다.&lt;/span&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;img src=&quot;data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==&quot; width=&quot;12&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;UI를 배치하다가 공간이 부족한 경우, 줄바꿈하여 다음행에서 계속 UI를 배치하는 레이아웃임&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. android-flowlayout 라이브러리 정보&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;&amp;nbsp; 1) 라이브러리 다운로드 주소&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;https://github.com/ApmeM/android-flowlayout&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 2) Installation and usage&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Add it as dependency in Gradle as : compile &#39;org.apmem.tools:layouts:1.10@aar&#39;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Or maven&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;dependency&amp;gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;groupId&amp;gt;org.apmem.tools&amp;lt;/groupId&amp;gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;artifactId&amp;gt;layouts&amp;lt;/artifactId&amp;gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;version&amp;gt;1.10&amp;lt;/version&amp;gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Add the following xml code into your layout/something.xml:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;lt;org.apmem.tools.layouts.FlowLayout&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;android:layout_width=&quot;fill_parent&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;android:layout_height=&quot;wrap_content&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;lt;/org.apmem.tools.layouts.FlowLayout&amp;gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Android&amp;nbsp;gravity now supported (in combination with elements weight):&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; f:weightDefault=&quot;1.0&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; android:gravity=&quot;fill&quot;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;To override default spacing between elements use default android margins in the child View element:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
android:layout_marginTop=&quot;32dip&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
android:layout_marginRight=&quot;32dip&quot;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Also if you need to break line before some object even if there is enough space for it in the previous line - use the following LayoutParameter in the child view element:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
f:layout_newLine=&quot;true&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 3) Detailed parameters&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;android:orientation - line direction. Use one of the following values:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;* horizontal - line will be in horizontal direction, linebreak will create new line&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;* vertical - line will be in vertical direction, linebreak will create new column&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;android:gravity - standart android gravity supported&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;debugDraw - draw debug information&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;weightDefault - default weight value for child elements. Used to fill line in case of Gravity.FILL_HORIZONTAL | Gravity.FILL_VERTICAL&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;layoutDirection - direction of inner child elements:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;nbsp;ltr - left to right direction&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;nbsp;rtl - right to left direction&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;android:layout_margin* - override default spacings&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;android:layout_gravity - standart aandroid gravity supported&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; * layout_weight - weight of the element. If not specified &quot;layout.defaultWight&quot; is used.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;layout_newLine - brake line before current element even if there is enough place in the current line.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 4) License&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Copyrights&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Copyright 2011, Artem Votincev (apmem.org)&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may not use this file except in compliance with the License. You may obtain a copy of the License at&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp;http://www.apache.org/licenses/LICENSE-2.0&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an &quot;AS IS&quot; 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.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em style=&quot;box-sizing: border-box; color: #333333; font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; text-align: justify;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;출처 : 인터넷에서 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; text-align: justify;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/9139864617664446422/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-android-android-flowlayout.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/9139864617664446422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/9139864617664446422'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-android-android-flowlayout.html' title='[STUDY] Android &quot;android-flowlayout&quot; 라이브러리 소개'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-1698309224427530273</id><published>2017-06-04T22:23:00.002-07:00</published><updated>2017-06-04T22:23:28.685-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android BADGE"/><category scheme="http://www.blogger.com/atom/ns#" term="shortcut"/><category scheme="http://www.blogger.com/atom/ns#" term="ShortcutBadger"/><category scheme="http://www.blogger.com/atom/ns#" term="뱃지"/><category scheme="http://www.blogger.com/atom/ns#" term="아이콘 뱃지"/><title type='text'>[STUDY] Android Shortcut &amp; Badge (ShortcutBadger 라이브러리 소개)</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
[목차]======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
1. Android 아이콘 뱃지 관련 라이브러리&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 1) 오픈소스 주소&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; 2) 사용법&lt;/span&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;&lt;b&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;2. Android 아이콘 뱃지 관련된 게시글 참고(주소 펴옴)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
===========================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;1. Android 아이콘 뱃지 관련 라이브러리&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;&lt;b&gt;&amp;nbsp; 1) 오픈소스 주소&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
https://github.com/leolin310148/ShortcutBadger&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;&amp;nbsp; 2) 사용법&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Add mavenCentral&amp;nbsp;to your build script.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; repositories {&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mavenCentral()&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Add dependencies for ShortcutBadger, it&#39;s available from maven now.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dependencies {&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compile &quot;me.leolin:ShortcutBadger:1.1.16@aar&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Add the codes below:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int badgeCount = 1;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ShortcutBadger.applyCount(context, badgeCount); //for 1.1.4+&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ShortcutBadger.with(getApplicationContext()).count(badgeCount); //for 1.1.3&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;If you want to remove the badge&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ShortcutBadger.removeCount(context); //for 1.1.4+&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ShortcutBadger.with(getApplicationContext()).remove();&amp;nbsp; //for 1.1.3&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
or&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ShortcutBadger.applyCount(context, 0); //for 1.1.4+&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp; &amp;nbsp; ShortcutBadger.with(getApplicationContext()).count(0); //for 1.1.3&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. Android 아이콘 뱃지 관련된 게시글 참고(주소 펴옴)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
[안드로이드 아이콘 뱃지&amp;nbsp;완전분해]&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
=&amp;gt;&amp;nbsp;&amp;nbsp;Android 아이콘 뱃지에 대한 분석 및 기본 개발에 대한 의견 참고&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
https://medium.com/marojuns-android/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%84%EC%9D%B4%EC%BD%98-%EB%B1%83%EC%A7%80-%EC%99%84%EC%A0%84%EB%B6%84%ED%95%B4-c27028014e4d&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;box-sizing: border-box; color: #333333; font-family: &amp;quot;KoPub Dotum&amp;quot;; font-size: 14px; margin-bottom: 10px; text-align: justify;&quot;&gt;
&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&lt;u style=&quot;box-sizing: border-box;&quot;&gt;출처 : 인터넷에서 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/1698309224427530273/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-android-shortcut-badge.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/1698309224427530273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/1698309224427530273'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-android-shortcut-badge.html' title='[STUDY] Android Shortcut &amp; Badge (ShortcutBadger 라이브러리 소개)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-5461264015450521870</id><published>2017-06-04T22:22:00.001-07:00</published><updated>2017-06-04T22:22:35.111-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Adapter"/><category scheme="http://www.blogger.com/atom/ns#" term="annotation"/><category scheme="http://www.blogger.com/atom/ns#" term="bind"/><category scheme="http://www.blogger.com/atom/ns#" term="Binding Reset"/><category scheme="http://www.blogger.com/atom/ns#" term="Butter Knife"/><category scheme="http://www.blogger.com/atom/ns#" term="butterknife"/><category scheme="http://www.blogger.com/atom/ns#" term="Listener Binding"/><category scheme="http://www.blogger.com/atom/ns#" term="Multi-Method Listeners"/><category scheme="http://www.blogger.com/atom/ns#" term="Non-Activity Binding"/><category scheme="http://www.blogger.com/atom/ns#" term="Optional Bindings"/><category scheme="http://www.blogger.com/atom/ns#" term="Resource Binding"/><category scheme="http://www.blogger.com/atom/ns#" term="버터나이프"/><title type='text'>[STUDY] Butter Knife (버터나이프 - 특징 / 사용법 / 기능 / 라이센스 등)</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #0055ff;&quot;&gt;[&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: #0055ff;&quot;&gt;ButterKnife&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;color: #0055ff;&quot;&gt;목차]&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;strong&gt;====================================&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. ButterKnife의 특징&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. 사용법&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;1) Gradle 파일 설정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;2) ButterKnife 라이브러리 bind&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. 기능&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;1) View를 담을 변수를 선언&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
2) View Lists&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;3) Listener Binding (onClickListener)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;4) Resource Binding&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;5) Non-Activity Binding&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;6) Binding Reset&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;7) Adapter&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;8) Multi-Method Listeners&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9) Optional Bindings&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;10) ETC&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4. License&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;====================================&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. ButterKnife의 특징&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;1)&amp;nbsp;필드나 메소드를 안드로이드 뷰에 어노테이션(@)을 이용하여 편하게 접근할 수 있도록 도와주는 안드로이드 라이브러리&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;=&amp;gt; ButterKnife 공식 홈페이지&amp;nbsp;&lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https://github.com/JakeWharton/butterknife&quot; href=&quot;https://github.com/JakeWharton/butterknife&quot; rel=&quot;nofollow noopener&quot; style=&quot;border-bottom: 1px dashed rgb(132, 0, 0); color: black; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #0066cc;&quot;&gt;https://github.com/JakeWharton/butterknife&lt;/span&gt;&lt;/u&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 11pt;&quot;&gt;2) 다수의 안드로이드 개발자들과 협업할때 View, Resource를 바인딩 하는 convention을 제공&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;=&amp;gt; 코드의 가독성 및 View ID 검색 및 효율성을 높여주는데 참 좋은것 같음&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;※ 자바 어노테이션(Annotation, @)이란?&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;a class=&quot;tx-link&quot; href=&quot;http://alltogetherwe.tistory.com/14&quot; style=&quot;border-bottom: 1px dashed rgb(132, 0, 0); color: black; text-decoration-line: none;&quot; target=&quot;_blank&quot;&gt;http://alltogetherwe.tistory.com/14&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;strong&gt;2. 사용법&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;1) Gradle 파일 설정&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
build.gradle 파일을 열어 dependencies를 추가해주시면 라이브러리 추가&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;dependencies {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;compile &#39;com.jakewharton:butterknife:7.0.1&#39;&lt;/strong&gt;}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) ButterKnife 라이브러리&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;bind&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
onCreate메서드에서 setContentView(LayoutID);를 한 후에, 바인드를 해주어야 함&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;Butternife.bind(this);&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 기능&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;1)&amp;nbsp;View를 담을 변수를 선언&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
이때까지 귀찮게, findViewById(viewID)를 하는 것을 내부적으로 ButterKnife가 도와주게 됨&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;@Bind(R.id.tv_info)&lt;/strong&gt;&amp;nbsp;TextView tv_info;&lt;br /&gt;
&lt;strong&gt;@Bind(R.id.btn_method)&lt;/strong&gt;&amp;nbsp;Button btn_method;&lt;br /&gt;
&lt;strong&gt;@Bind(R.id.btn_listener)&lt;/strong&gt;&amp;nbsp;Button btn_listener;&lt;br /&gt;
&lt;strong&gt;@Bind(R.id.btn_implements)&lt;/strong&gt;&amp;nbsp;Button btn_implements;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;span class=&quot;kwd&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ExampleActivity&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;extends&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Activity&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;title&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;subtitle&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;subtitle&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;footer&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;footer&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;lit&quot;&gt;@Override&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;onCreate&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Bundle&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;savedInstanceState&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;onCreate&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;savedInstanceState&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;simple_activity&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ButterKnife&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// TODO Use fields...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) View Lists&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
여러 View를 (예제에서는 EditText) List로 관리하는 예제입니다. View들을 List에 담아 놓고 ButterKnife.apply()함수로 속성값을 일괄 적용하는 모습을 보여주고 있는데요 DISABLE, ENABLED와 같은 interface가 어떻게 되어 있는지 구현부 까지 보여주고 있습니다.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; font-size:13px=&quot;&quot; sans-serif=&quot;&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; font-size: 13px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;// You can group multiple views into a List or array.&lt;br /&gt;
&lt;b&gt;@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })&lt;/b&gt;&lt;br /&gt;
List&amp;lt;EditText&amp;gt; nameViews;&lt;br /&gt;
&lt;br /&gt;
// The apply method allows you to act on all the views in a list at once.&lt;br /&gt;
&lt;b&gt;ButterKnife.apply(nameViews, DISABLE);&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;ButterKnife.apply(nameViews, ENABLED, false);&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
// Action and Setter interfaces allow specifying simple behavior.&lt;br /&gt;
&lt;b&gt;static final ButterKnife.Action&amp;lt;View&amp;gt; DISABLE = new ButterKnife.Action&amp;lt;View&amp;gt;() {&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; public void apply(View view, int index) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; view.setEnabled(false);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
};&lt;br /&gt;
&lt;b&gt;static final ButterKnife.Setter&amp;lt;View, Boolean&amp;gt; ENABLED = new ButterKnife.Setter&amp;lt;View, Boolean&amp;gt;() {&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; public void set(View view, Boolean value, int index) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; view.setEnabled(value);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// An Android Property can also be used with the apply method.&lt;br /&gt;
ButterKnife.apply(nameViews, View.ALPHA, 0.0f);&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;3) Listener Binding (onClickListener)&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;@OnClick(R.id.btn_method)&lt;/strong&gt;&lt;br /&gt;
void methodButtonClick() {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;@OnClick(R.id.btn_listener)&lt;/strong&gt;&lt;br /&gt;
void listenerButtonClick() {&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;@OnClick(R.id.btn_implements)&lt;/strong&gt;&lt;br /&gt;
void implementsButtonClick() {&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;@OnClick({R.id.btn_method, R.id.btn_listener, R.id.btn_implements})&lt;/strong&gt;&lt;br /&gt;
void buttonEvents(View v) {&lt;br /&gt;
&amp;nbsp;//이벤트를 처리할 로직...&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;4) Resource Binding&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Bind pre-defined resources with&amp;nbsp;&lt;strong&gt;@BindBool&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;@BindColor&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;@BindDimen&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;@BindDrawable&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;@BindInt&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;@BindString&lt;/strong&gt;, which binds an R.bool ID (or your specified type) to its corresponding field.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;span class=&quot;kwd&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ExampleActivity&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;extends&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Activity&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindString&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;title&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindDrawable&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;drawable&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;graphic&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Drawable&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;graphic&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindColor&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;red&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;red&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// int or ColorStateList field&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindDimen&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;dimen&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;spacer&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Float&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;spacer&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// int (for pixel size) or float (for exact value) field&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// ...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;5) Non-Activity Binding&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
You can also perform binding on arbitrary objects by supplying your own view root.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;typ&quot;&gt;FancyFragment&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;extends&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Fragment&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;button1&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;button1&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;button2&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;button2&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;lit&quot;&gt;@Override&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;onCreateView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;LayoutInflater&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;inflater&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewGroup&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;container&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Bundle&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;savedInstanceState&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;inflater&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;inflate&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;fancy_fragment&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;container&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;typ&quot;&gt;ButterKnife&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// TODO Use fields...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;6) Binding Reset&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Fragments have a different view lifecycle than activities. When binding a fragment in onCreateView, set the views to null in onDestroyView. Butter Knife returns an Unbinder instance when you call bind to do this for you. Call its unbind method in the appropriate lifecycle callback&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;FancyFragment&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;extends&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Fragment&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;button1&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;button1&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;button2&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;button2&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;kwd&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Unbinder&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;unbinder&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;lit&quot;&gt;@Override&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;onCreateView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;LayoutInflater&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;inflater&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewGroup&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;container&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;Bundle&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;savedInstanceState&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;inflater&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;inflate&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;fancy_fragment&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;container&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;unbinder&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ButterKnife&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// TODO Use fields...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@Override&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;onDestroyView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;onDestroyView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;unbinder&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;unbind&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;();&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;7)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Adapter&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Another use is simplifying the view holder pattern inside of a list adapter&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;MyAdapter&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;extends&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;BaseAdapter&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;lit&quot;&gt;@Override&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;getView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;position&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewGroup&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;parent&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewHolder&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;holder&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;view&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; holder&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewHolder&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;getTag&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;view&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;inflater&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;inflate&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;whatever&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;parent&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;holder&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewHolder&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;view&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;setTag&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;holder&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;holder&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;setText&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;str&quot;&gt;&quot;John Doe&quot;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// etc...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;kwd&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewHolder&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;job_title&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;jobTitle&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ViewHolder&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;typ&quot;&gt;ButterKnife&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;8) Multi-Method Listeners&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Method annotations whose corresponding listener has multiple callbacks can be used to bind to any one of them. Each annotation has a default callback that it binds to. Specify an alternate using the callback parameter.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;&amp;nbsp;&lt;span class=&quot;lit&quot;&gt;@OnItemSelected&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;list_view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;onItemSelected&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;position&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// TODO ...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span class=&quot;lit&quot;&gt;@OnItemSelected&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;value&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;maybe_missing&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;callback&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;NOTHING_SELECTED&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/strong&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;onNothingSelected&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// TODO ...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;9) Optional Bindings&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;b&gt;&lt;span class=&quot;lit&quot;&gt;@Nullable&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;lit&quot;&gt;@BindView&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;might_not_be_there&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;mightNotBeThere&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;lit&quot;&gt;@Optional&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;lit&quot;&gt;@OnClick&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;maybe_missing&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;onMaybeMissingClicked&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;com&quot;&gt;// TODO ...&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;}&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;u&gt;10) ETC&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Also included are findById methods which simplify code that still has to find views on a View, Activity, or Dialog. It uses generics to infer the return type and automatically performs the cast.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;span class=&quot;typ&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;view&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;LayoutInflater&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;context&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;inflate&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;thing&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;kwd&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;firstName&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ButterKnife&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;first_name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;TextView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;lastName&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ButterKnife&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;last_name&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ImageView&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;photo&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;typ&quot;&gt;ButterKnife&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;findById&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;&amp;nbsp;R&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;pln&quot;&gt;photo&lt;/span&gt;&lt;span class=&quot;pun&quot;&gt;);&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;Add a static import for ButterKnife.findById and enjoy even more fun&lt;/strong&gt;.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. License&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;Copyright 2013 Jake Wharton&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;Licensed under the Apache License, Version 2.0&lt;/strong&gt;&amp;nbsp;(the &quot;License&quot;);&lt;br /&gt;you may not use this file except in compliance with the License.&lt;br /&gt;You may obtain a copy of the License at&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot; style=&quot;border-bottom: 1px dashed rgb(132, 0, 0); color: black; text-decoration-line: none;&quot;&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Unless required by applicable law or agreed to in writing, software&lt;br /&gt;distributed under the License is distributed on an &quot;AS IS&quot; BASIS,&lt;br /&gt;WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;See the License for the specific language governing permissions and&lt;br /&gt;limitations under the License.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em&gt;&lt;u&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/5461264015450521870/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-butter-knife.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5461264015450521870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5461264015450521870'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-butter-knife.html' title='[STUDY] Butter Knife (버터나이프 - 특징 / 사용법 / 기능 / 라이센스 등)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-6168216886253764129</id><published>2017-06-04T22:21:00.000-07:00</published><updated>2017-06-04T22:21:15.872-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Connect"/><category scheme="http://www.blogger.com/atom/ns#" term="Connectable"/><category scheme="http://www.blogger.com/atom/ns#" term="Observable"/><category scheme="http://www.blogger.com/atom/ns#" term="publish"/><category scheme="http://www.blogger.com/atom/ns#" term="refCount"/><category scheme="http://www.blogger.com/atom/ns#" term="Replay"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><title type='text'>[STUDY] RxAndroid Part 9 (Connectable Observable )</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;1. Connectable Observable 정의&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
2. Connectable Observable 사용 예제&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. Connectable Observable 정의&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&amp;nbsp;Connectable Observable은 구독을 하더라도 이템 방출을 시작하지 않는다는 점을 제외하면 일반적인 Observable과 비슷합니다. connect()을 호출했을 때에만 방출합니다. 이 방법으로 Subscriber들에게 Observable가 방출을 시작하기전에 Observable구독하도록 기다릴 수 있습니다.&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;ConnectableObservable.connect&lt;/strong&gt;( ) — Connectable Observable에게 아이템 방출을 시작하라고 지시한다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Observable.publish&lt;/strong&gt;( ) — Observable을 Connectable Observable으로 변형시킨다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Observable.replay&lt;/strong&gt;( ) — 모든 Observer들에게 방출이 시작된 후에 구독을 했을 경우라도 같은 순서의 방출된 아이템을 볼 수 있도록 보장합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;ConnectableObservable.refCount&lt;/strong&gt;( ) — Connectable Observable을 일반적인 Observable처럼 작동하도록 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; text-align: center;&quot;&gt;
&lt;img class=&quot;txc-image&quot; height=&quot;398&quot; id=&quot;tx_entry_83467_&quot; src=&quot;http://cfile27.uf.tistory.com/image/265EA64959168F1E05B6E9&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2.&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;Connectable Observable 사용 예제&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
아래의 예제코드는 같은 Observable을 구독하는 두개의 subscriber를 보여주는 코드입니다. 첫번째 케이스에서는 일반적인 Observable이고 두번째 케이스에서는 Connectable Observable으로 subscriber가 모두 구독한 이후 연결하였습니다.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;&amp;nbsp;Observable firstMillion&amp;nbsp; = Observable.range&lt;/strong&gt;( 1, 1000000 ).sample(7, java.util.concurrent.TimeUnit.MILLISECONDS);&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;firstMillion.subscribe&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Subscriber #1:&quot; + it); },&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onNext&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Error: &quot; + it.getMessage()); }, // onError&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Sequence #1 complete&quot;); }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onCompleted&lt;br /&gt;);&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;firstMillion.subscribe&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { println(&quot;Subscriber #2:&quot; + it); },&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onNext&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { println(&quot;Error: &quot; + it.getMessage()); }, // onError&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { println(&quot;Sequence #2 complete&quot;); }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onCompleted&lt;br /&gt;);&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;Subscriber #1:211128&lt;br /&gt;Subscriber #1:411633&lt;br /&gt;Subscriber #1:629605&lt;br /&gt;Subscriber #1:841903&lt;br /&gt;Sequence #1 complete&lt;br /&gt;Subscriber #2:244776&lt;br /&gt;Subscriber #2:431416&lt;br /&gt;Subscriber #2:621647&lt;br /&gt;Subscriber #2:826996&lt;br /&gt;Sequence #2 complete&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 210px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;Observable firstMillion&amp;nbsp; = Observable.range&lt;/strong&gt;( 1, 1000000 ).sample(7, java.util.concurrent.TimeUnit.MILLISECONDS).&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;publish&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;();&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;firstMillion.subscribe&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Subscriber #1:&quot; + it); },&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onNext&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Error: &quot; + it.getMessage()); }, // onError&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Sequence #1 complete&quot;); }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onCompleted&lt;br /&gt;);&lt;br /&gt;
&lt;strong&gt;firstMillion.subscribe&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Subscriber #2:&quot; + it); },&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onNext&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Error: &quot; + it.getMessage()); }, // onError&lt;br /&gt;&amp;nbsp;&amp;nbsp; { println(&quot;Sequence #2 complete&quot;); }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // onCompleted&lt;br /&gt;);&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;firstMillion.connect();&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;Subscriber #2:208683&lt;br /&gt;Subscriber #1:208683&lt;br /&gt;Subscriber #2:432509&lt;br /&gt;Subscriber #1:432509&lt;br /&gt;Subscriber #2:644270&lt;br /&gt;Subscriber #1:644270&lt;br /&gt;Subscriber #2:887885&lt;br /&gt;Subscriber #1:887885&lt;br /&gt;Sequence #2 complete&lt;br /&gt;Sequence #1 complete&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;u style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;em&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/em&gt;&lt;/u&gt;</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/6168216886253764129/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-9-connectable.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/6168216886253764129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/6168216886253764129'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-9-connectable.html' title='[STUDY] RxAndroid Part 9 (Connectable Observable )'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-930842622266663209</id><published>2017-06-04T22:20:00.002-07:00</published><updated>2017-06-04T22:20:26.081-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="onError"/><category scheme="http://www.blogger.com/atom/ns#" term="OnErrorResumeNext"/><category scheme="http://www.blogger.com/atom/ns#" term="onErrorReturn"/><category scheme="http://www.blogger.com/atom/ns#" term="Retry"/><category scheme="http://www.blogger.com/atom/ns#" term="RetryWhen"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><category scheme="http://www.blogger.com/atom/ns#" term="RxJava"/><title type='text'>[STUDY] RxAndroid Part 8 (Error 핸들링 방법)</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;1. onError 해주지 않으면 Crash가 발생 주의&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;2. subscribe 에서 에러 처리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;3. Error 캐치 - onErrorReturn&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;4. Error 캐치 - OnErrorResumeNext&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;5. Retry&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;6. Retry 횟수 제한&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;7. RetryWhen&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;RxJava &amp;amp; RxAndroid 사용 시 항상 에러 핸들러를 구독하고 제공하는지 항상 확인해야 합니다&lt;/u&gt;. 그렇지 않으면 특히 Scheduler를 적용할 때 스택 트레이스에 아무것도 없을 수 있습니다. 물론&amp;nbsp;&lt;u&gt;RxJava &amp;amp; RxAndroid 에서 뭔가 잘못됐다고 알려주긴 하지만 어디서 발생했는지 찾을 방법이 없습니다. 항상 에러 콜백을 사용하고, 에러가 발생한다면 에러를 로그로 남겨서 예상치 못한 오류를 기록해야 합니다&lt;/u&gt;.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. onError 해주지 않으면 Crash가 발생 주의&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; subscriber) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).subscribe(new Consumer&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void accept(String s) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log(&quot;on next: &quot; + s);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. subscribe 에서 에러 처리&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;br /&gt;
Observable.create(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; subscriber) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;&lt;strong&gt;log&lt;/strong&gt;&lt;/u&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).subscribe(new DefaultObserver&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onNext&lt;/strong&gt;(String value) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;on next: &quot; + value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;@Override&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onError(Throwable e) {&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 에러시 처리를 여기로 받음&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;log&lt;/span&gt;&lt;/strong&gt;(&quot;error:&quot; + e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onComplete&lt;/strong&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;completed&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;error:java.lang.Throwable&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. Error 캐치 - onErrorReturn&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;u&gt;Observable 체인 안에서 발생한 Error 를 캐치해서, 대체할 Object로 변환하는 것으로 subscriber에 Error가 전달되는 것을 막을 수 있다&lt;/u&gt;.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; subscriber) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;onErrorReturn(new Function&amp;lt;Throwable, String&amp;gt;()&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String apply(Throwable throwable) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &quot;return&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).subscribe(new DefaultObserver&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onNext&lt;/strong&gt;(String value) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;on next: &quot; + value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onError&lt;/strong&gt;(Throwable e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 에러시 처리를 여기로 받음&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;error:&quot; + e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onComplete&lt;/strong&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;completed&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;on next: return&lt;br /&gt;completed&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. Error 캐치 -&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;OnErrorResumeNext&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;u&gt;Observable 체인에서 발생한 Error를 캐치해서, 그 안에서 다시 한 번 Observable를 호출하면 에러시 대체 Stream을 반환할 수 있다.&lt;/u&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; subscriber) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;subscriber.onError(new Throwable());&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;onErrorResumeNext(new Function&amp;lt;Throwable, ObservableSource&amp;lt;? extends String&amp;gt;&amp;gt;() {&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ObservableSource&amp;lt;? extends String&amp;gt; apply(Throwable throwable) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Observable.fromArray(new String[]{&quot;resume 1&quot;, &quot;resume 2&quot;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).subscribe(new DefaultObserver&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onNext&lt;/strong&gt;(String value) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;on next: &quot; + value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onError&lt;/strong&gt;(Throwable e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 에러시 처리를 여기로 받음&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;error:&quot; + e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;onComplete&lt;/strong&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;completed&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;on next: resume 1&lt;br /&gt;on next: resume 2&lt;br /&gt;completed&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;5. Retry&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;u&gt;Error가 일어났을 때, 자동으로 subscribe를 다시 해준다.&lt;/u&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;성공할때까지 계속... 무한루프 될 가능성이 있으므로 유의해야 한다&lt;/u&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;span style=&quot;color: red;&quot;&gt;retry&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;()&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribe()&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;반복&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;6. Retry 횟수 제한&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; .retry(3)&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribe()&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;error:java.lang.Throwable&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Retry 좀 더 구체적인 설정&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;.retry(new BiPredicate&amp;lt;Integer, Throwable&amp;gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public boolean test(Integer integer, Throwable throwable) throws Exception {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (integer &amp;lt; 3) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return throwable instanceof IllegalStateException;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribe(s -&amp;gt; log(&quot;on next: &quot; + s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , e -&amp;gt; log(&quot;error:&quot; + e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , () -&amp;gt; log(&quot;completed&quot;));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;error:java.lang.Throwable&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;7.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;RetryWhen&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;u&gt;보다 세밀하게 retry 처리를 제어하기 위한 함수.&lt;/u&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;retryWhen(new Function&amp;lt;Observable&amp;lt;Throwable&amp;gt;, ObservableSource&amp;lt;?&amp;gt;&amp;gt;() {&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ObservableSource&amp;lt;?&amp;gt; apply(Observable&amp;lt;Throwable&amp;gt; throwableObservable) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return throwableObservable.flatMap(new Function&amp;lt;Throwable, ObservableSource&amp;lt;?&amp;gt;&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ObservableSource&amp;lt;?&amp;gt; apply(Throwable throwable) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Observable.timer(3, TimeUnit.SECONDS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).subscribe(s -&amp;gt; log(&quot;on next: &quot; + s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , e -&amp;gt; log(&quot;error:&quot; + e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , () -&amp;gt; log(&quot;completed&quot;));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;// 3초 후&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;// 3초 후&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;반복&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;그냥 Error인채로 종료&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).subscribeOn(AndroidSchedulers.mainThread())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;.retryWhen(throwableObservable -&amp;gt; throwableObservable.flatMap(&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throwable -&amp;gt; Observable.error(throwable)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ))&lt;/span&gt;&lt;/strong&gt;.subscribe(s -&amp;gt; log(&quot;on next: &quot; + s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , e -&amp;gt; log(&quot;error:&quot; + e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , () -&amp;gt; log(&quot;completed&quot;));&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;strong style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Error에 대한 처리를 하지 않고 Complete하기&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;span style=&quot;background-color: white; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;onErrorResumeNext(throwable -&amp;gt; {Observable.empty();})&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribe(s -&amp;gt; log(&quot;on next: &quot; + s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , e -&amp;gt; log(&quot;error:&quot; + e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , () -&amp;gt; log(&quot;completed&quot;));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;completed&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3번 retry하고 종료&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;u&gt;이 경우, 앞의 retry(count) 함수와의 차이는 retry(count)에서는 retry 횟수가 제한에 도달한 후에 error로 종료합니다만, 이 케이스는 completed 에서 종료한다는 점이다&lt;/u&gt;.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 158px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;retryWhen(throwableObservable -&amp;gt; throwableObservable.take(3))&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribe(s -&amp;gt; log(&quot;on next: &quot; + s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , e -&amp;gt; log(&quot;error:&quot; + e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , () -&amp;gt; log(&quot;completed&quot;));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;completed&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3초 retry를 3번 하고 종료하기&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.create(subscriber -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;log&lt;/u&gt;&lt;/strong&gt;(&quot;subscribe&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;emit 2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subscriber.onError(new Throwable());&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;retryWhen(new Function&amp;lt;Observable&amp;lt;Throwable&amp;gt;, ObservableSource&amp;lt;?&amp;gt;&amp;gt;() {&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ObservableSource&amp;lt;?&amp;gt; apply(@NonNull Observable&amp;lt;Throwable&amp;gt; throwableObservable) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return throwableObservable.take(3).flatMap(new Function&amp;lt;Throwable, ObservableSource&amp;lt;?&amp;gt;&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ObservableSource&amp;lt;?&amp;gt; apply(@NonNull Throwable throwable) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Observable.timer(3, TimeUnit.SECONDS);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).subscribe(s -&amp;gt; log(&quot;on next: &quot; + s)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , e -&amp;gt; log(&quot;error:&quot; + e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , () -&amp;gt; log(&quot;completed&quot;));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;// 3초 후&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;// 3초 후&lt;br /&gt;subscribe&lt;br /&gt;on next: emit 1&lt;br /&gt;on next: emit 2&lt;br /&gt;completed&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&amp;nbsp;&lt;em&gt;&lt;u&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&amp;nbsp;&lt;/u&gt;&lt;/em&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/930842622266663209/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-8-error.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/930842622266663209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/930842622266663209'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-8-error.html' title='[STUDY] RxAndroid Part 8 (Error 핸들링 방법)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-7222913715820609442</id><published>2017-06-04T22:19:00.000-07:00</published><updated>2017-06-04T22:19:40.108-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computation"/><category scheme="http://www.blogger.com/atom/ns#" term="createWorker"/><category scheme="http://www.blogger.com/atom/ns#" term="From"/><category scheme="http://www.blogger.com/atom/ns#" term="immediate"/><category scheme="http://www.blogger.com/atom/ns#" term="IO"/><category scheme="http://www.blogger.com/atom/ns#" term="mainThread"/><category scheme="http://www.blogger.com/atom/ns#" term="newThread"/><category scheme="http://www.blogger.com/atom/ns#" term="observeOn"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><category scheme="http://www.blogger.com/atom/ns#" term="RxJava"/><category scheme="http://www.blogger.com/atom/ns#" term="scheduler"/><category scheme="http://www.blogger.com/atom/ns#" term="subsctibeOn"/><category scheme="http://www.blogger.com/atom/ns#" term="trampoline"/><title type='text'>[STUDY] RxAndroid Part 7 (Scheduler 이해하기)</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. RxJava와 RxAndroid에서 제공하는 Scheduler 종류&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
1) RxJava가 제공하는 Scheduler&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
2) RxAndroid는 제공하는 Scheduler&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. 독립적으로 사용 가능한 Scheduler&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. 사용법 예제&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
1) Scheduler 안한 경우 기본 동작&lt;br /&gt;2) subscribeOn() API만 사용한 경우 동작&lt;br /&gt;3) observerOn() API만 사용한 경우 동작&lt;br /&gt;4) subscribeOn() &amp;amp; observerOn() 1번씩 API 사용한 경우 동작&lt;br /&gt;5) subscribeOn() &amp;amp; observerOn() 다수 API 사용한 경우 동작&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;RxAndroid에서는 Scheduler를 통해 어느 쓰레드에서 실행이 될지 결정 할 수 있습니다.&lt;/u&gt;Scheduler는 subsctibeOn(), observeOn() 에서 각각 지정할 수 있는데&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;strong&gt;subsctibeOn()&lt;/strong&gt;은&amp;nbsp;&lt;u&gt;observable의 작업을 시작하는 쓰레드를 선택&lt;/u&gt;&amp;nbsp;할 수 있습니다.( 중복해서 적을 경우 가장 마지막에 적힌 스레드에서 시작합니다.)&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;strong&gt;observeOn()&lt;/strong&gt;은 이후에 나오는 Operator, subscribe의&amp;nbsp;&lt;u&gt;Scheduler를 변경&amp;nbsp;&lt;/u&gt;할 수 있습니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. RxJava와 RxAndroid에서 제공하는 Scheduler 종류&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1) RxJava가 제공하는 Scheduler&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Schedulers.computation()&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
이벤트 룹에서 간단한 연산이나 콜백 처리를 위해서 쓰는 것입니다. I/O 처리를 여기에서 해서는 안됩니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
RxComputationThreadPool라는 별도의 스레드 풀에서 돌아갑니다. 최대 cpu갯수 ?개의 스레드 풀이 순환하면서 실행됩니다.&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Schedulers.from(executor)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
특정 executor를 스케쥴러로 사용합니다&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Schedulers.immediate&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
현재 스레드에서 즉시 수행합니다.&lt;br /&gt;observeOn()이 여러번 쓰였을 경우 immediate()를 선언한 바로 윗쪽의 스레드를 따라갑니다.&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Schedulers.io()&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
동기 I/O를 별도로 처리시켜 비동기 효율을 얻기 위한 스케줄러입니다. 자체적인 스레드 풀에 의존합니다.&lt;br /&gt;자체적인 스레드 풀 CachedThreadPool을 사용합니다. API 호출 등 네트워크를 사용한 호출 시 사용됩니다.&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Schedulers.newThread()&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
항상 새로운 스레드를 만드는 스케쥴러입니다.&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Schedulers.trampoline()&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
큐에 있는 일이 끝나면 이어서 현재 스레드에서 수행하는 스케쥴러&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
※ 일부 오퍼레이터들은 자체적으로 어떤 스케쥴러를 사용할지 지정합니다. 예를 들어 buffer 오퍼레이터는 Schedulers.computation()에 의존하며 repeat은 Schedulers.trampoline()를 사용합니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) RxAndroid는 제공하는 Scheduler&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;AndroidSchedulers.mainThread()&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
안드로이드의 UI 스레드에서 동작&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;HandlerScheduler.from(handler)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
특정 핸들러 handler에 의존하여 동작&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
※ 안드로이드에 특화된 스케쥴러입니다. 보통은 RxAndroid가 제공하는 AndroidSchedulers.mainThread()와 RxJava가 제공하는 Schedulers.io()를 조합해서 Schedulers.io()에서 수행한 결과를 AndroidSchedulers.mainThread()에서 받아 UI에 반영하는 패턴등이 일반적으로 쓰입니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. 독립적으로 사용 가능한&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Scheduler&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;Scheduler는 Observable, Operator, Subscriber 모델 밖에서 별도로 사용할 수 있습니다.&lt;/u&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;worker = Schedulers.newThread().createWorker();&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;worker.schedule&lt;/strong&gt;(new Action0() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void call() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; realmJob();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
});&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 123px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;Scheduler.Worker worker = Schedulers.newThread().createWorker();&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;worker.schedule&lt;/strong&gt;(new Runnable() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void run() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log(&quot;worker: &quot; + Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;worker: RxNewThreadScheduler-1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. 사용법&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;예제&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1) Scheduler 안한 경우 기본 동작&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;Observable.&lt;span style=&quot;color: #ff5e00;&quot;&gt;&lt;strong&gt;create&lt;/strong&gt;&lt;/span&gt;(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; e) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;subscribe:&quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.onNext(&quot;next&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;map&lt;/span&gt;&lt;/strong&gt;(s1 -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;map: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribe&lt;/span&gt;&lt;/strong&gt;(s -&amp;gt;&amp;nbsp;&lt;u&gt;log(&quot;on next: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName()));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe:main&lt;br /&gt;map: main&lt;br /&gt;on next: main&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) subscribeOn() API만 사용한 경우 동작&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;Observable.&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;create&lt;/span&gt;&lt;/strong&gt;(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; e) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;subscribe:&quot;&amp;nbsp;&lt;/u&gt;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.onNext(&quot;next&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;Schedulers.computation&lt;/u&gt;&lt;/strong&gt;()).map(s1 -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;map: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribe&lt;/span&gt;&lt;/strong&gt;(s -&amp;gt;&amp;nbsp;&lt;u&gt;log(&quot;on next: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName()));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe:RxComputationThreadPool-1&lt;br /&gt;map: RxComputationThreadPool-1&lt;br /&gt;on next: RxComputationThreadPool-1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3) observerOn() API만 사용한 경우 동작&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 192px; line-height: normal; width: 464px;&quot;&gt;Observable.&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;create&lt;/span&gt;&lt;/strong&gt;(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; e) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;subscribe:&quot;&amp;nbsp;&lt;/u&gt;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.onNext(&quot;next&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;observeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;Schedulers.computation&lt;/u&gt;&lt;/strong&gt;()).map(s1 -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;map: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribe&lt;/span&gt;&lt;/strong&gt;(s -&amp;gt;&amp;nbsp;&lt;u&gt;log(&quot;on next: &quot;&amp;nbsp;&lt;/u&gt;+ Thread.currentThread().getName()));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe:main&lt;br /&gt;map: RxComputationThreadPool-1&lt;br /&gt;on next: RxComputationThreadPool-1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4) subscribeOn() &amp;amp; observerOn() 1번씩 API 사용한 경우 동작&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 226px; line-height: normal; width: 464px;&quot;&gt;Observable.&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;create&lt;/span&gt;&lt;/strong&gt;(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; e) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;subscribe:&quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.onNext(&quot;next&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;Schedulers.io&lt;/u&gt;&lt;/strong&gt;())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;observeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;AndroidSchedulers.mainThread&lt;/u&gt;&lt;/strong&gt;())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .map(s1 -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;map:&amp;nbsp;&lt;/u&gt;&quot; + Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribe&lt;/span&gt;&lt;/strong&gt;(s -&amp;gt;&amp;nbsp;&lt;u&gt;log(&quot;on next: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName()));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe:RxCachedThreadScheduler-1&lt;br /&gt;map: main&lt;br /&gt;on next: main&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;5) subscribeOn() &amp;amp; observerOn() 다수 API 사용한 경우 동작&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;Observable.&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;create&lt;/span&gt;&lt;/strong&gt;(new ObservableOnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void subscribe(ObservableEmitter&amp;lt;String&amp;gt; e) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;&amp;nbsp;log(&quot;subscribe:&lt;/u&gt;&quot; + Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.onNext(&quot;next&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;Schedulers.io&lt;/u&gt;&lt;/strong&gt;())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;Schedulers.computation&lt;/u&gt;&lt;/strong&gt;())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;observeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;AndroidSchedulers.mainThread&lt;/u&gt;&lt;/strong&gt;()).map(s1 -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;&amp;nbsp;log(&quot;map1: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;observeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;Schedulers.newThread&lt;/u&gt;&lt;/strong&gt;()).map(s2 -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;map2: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;observeOn&lt;/span&gt;&lt;/strong&gt;(&lt;strong&gt;&lt;u&gt;Schedulers.single&lt;/u&gt;&lt;/strong&gt;()).map(s3 -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;u&gt;log(&quot;map3: &quot;&lt;/u&gt;&amp;nbsp;+ Thread.currentThread().getName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}).&lt;strong&gt;&lt;span style=&quot;color: #ff5e00;&quot;&gt;subscribe&lt;/span&gt;&lt;/strong&gt;(s -&amp;gt;&amp;nbsp;&lt;u&gt;log(&quot;on next: &quot;&amp;nbsp;&lt;/u&gt;+ Thread.currentThread().getName()));&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;[출력결과]&lt;/strong&gt;&lt;br /&gt;subscribe:RxCachedThreadScheduler-1&lt;br /&gt;map1: main&lt;br /&gt;map2: RxNewThreadScheduler-1&lt;br /&gt;map3: RxSingleScheduler-1&lt;br /&gt;on next: RxSingleScheduler-1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em&gt;&lt;u&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&amp;nbsp;&lt;/u&gt;&lt;/em&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/7222913715820609442/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-7-scheduler.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/7222913715820609442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/7222913715820609442'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-7-scheduler.html' title='[STUDY] RxAndroid Part 7 (Scheduler 이해하기)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-3881764844808913626</id><published>2017-06-04T22:18:00.000-07:00</published><updated>2017-06-04T22:18:24.765-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AsyncSubject"/><category scheme="http://www.blogger.com/atom/ns#" term="BehaviorSubject"/><category scheme="http://www.blogger.com/atom/ns#" term="PublishSubject"/><category scheme="http://www.blogger.com/atom/ns#" term="ReplaySubject"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><category scheme="http://www.blogger.com/atom/ns#" term="Subject"/><title type='text'>[STUDY] RxAndroid Part 6 (Subject 사용 - PublishSubject/BehaviorSubject)</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
1. PublishSubject&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
2. BehaviorSubject&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
3. ReplaySubject&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
4. AsyncSubject&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Subject 는 Observable + Subscriber 로 종종 표현되고는 합니다만, 정확한 표현은 아니라고 생각합니다. (왜냐하면 일반적인 Subscriber 처럼 subscribe()에 직접 사용되는 경우는 거의 없습니다.)&lt;br /&gt;물론 Subject 는 Observable 과 Subscriber 를 모두 implementation 하고 있으니 틀린 이야기는 아닙니다만,&lt;br /&gt;저는 Subject 는 이벤트를 전달받아 구독자들에게 이벤트를 전파하는 중간다리라고 하는게 좀 더 정확한 표현이라고 생각합니다.&lt;br /&gt;onNext()로 전달받은 이벤트를 구독자들에게 전파하며, onCompleted()나 onError()를 받으면 이것 역시 구독자들에게 전파하고 Observable로의 역할을 종료하게 됩니다.&lt;br /&gt;Android 에서는 EventBus 와 같은 형태로도 사용이 가능합니다. 즉 RxJava 를 사용하면 다른 EventBus 라이브러리가 불필요해집니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
EventBus 언급을 한것에서 살짝 힌트를 받으셨겠지만 Subject 들은 보통 onCompleted 와 같이 종료하는 과정이 없이, 액티비티 라이프사이클(또는 앱 라이프사이클)과 동일하게 살아서 이벤트를 전파하는 역할로 자주 사용됩니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
여기서는 PublishSubject 와 BehaviorSubject 만 언급하고 넘어가겠습니다만, 다른 Subject 들도 무척 유용하니 기회가 된다면 한번씩 사용해보시는걸 권장해드립니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. PublishSubject&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;PublishSubject 를 구독한 시점으로부터 이후에 발생하는 이벤트들을 전달&lt;/u&gt;받음&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; text-align: center;&quot;&gt;
&lt;img class=&quot;txc-image&quot; height=&quot;316&quot; id=&quot;tx_entry_46608_&quot; src=&quot;http://cfile28.uf.tistory.com/image/236C554359167E61387324&quot; width=&quot;500&quot; /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 175px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void publishSubject() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;PublishSubject&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;lt;String&amp;gt; subject = PublishSubject.create();&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;첫번째 호출&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;두번째 호출&quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subject.&lt;span style=&quot;color: red;&quot;&gt;subscribe&lt;/span&gt;&lt;/strong&gt;(text -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onNext : &quot; + text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;세번째 호출&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;네번째 호출&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 결과&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 세번째 호출&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 네번째 호출&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. BehaviorSubject&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
BehaviorSubject 는 PublishSubject 와 비슷합니다만, 구독전에&amp;nbsp;&lt;u&gt;한건이라도 이벤트가 발생했다면 구독시점에 해당 이벤트도 같이 전달&lt;/u&gt;받음&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
가장 최근에 관찰된 아이템과 그 후에 관찰된 나머지 아이템을 구독하는 옵저버에게 발행&lt;/div&gt;
&lt;img class=&quot;txc-image&quot; height=&quot;324&quot; id=&quot;tx_entry_13814_&quot; src=&quot;http://cfile5.uf.tistory.com/image/2311904359167E612C53A7&quot; style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot; width=&quot;500&quot; /&gt;&lt;span style=&quot;background-color: white; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void behaviorSubject() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;BehaviorSubject&amp;lt;String&amp;gt; subject = BehaviorSubject.create();&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;첫번째 호출&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;두번째 호출&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;subject.&lt;span style=&quot;color: red;&quot;&gt;subscribe&lt;/span&gt;&lt;/strong&gt;(text -&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onNext : &quot; + text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;세번째 호출&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subject.onNext(&quot;네번째 호출&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 결과&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 두번째 호출&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 세번째 호출&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 네번째 호출&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. ReplaySubject&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
관찰한 모든 아이템을 버퍼에 저장하고 구독하는 옵저버에게 재생&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
(보완필요)&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. AsyncSubject&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
옵저버블이 완료됐을 때 구독하고 있는 각 옵저버에게 관찰한 마지막 아이템만을 발행&lt;/div&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;(보완필요)&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/3881764844808913626/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-6-subject.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/3881764844808913626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/3881764844808913626'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-6-subject.html' title='[STUDY] RxAndroid Part 6 (Subject 사용 - PublishSubject/BehaviorSubject)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-8319242805754475873</id><published>2017-06-04T22:17:00.000-07:00</published><updated>2017-06-04T22:17:24.056-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="combineLatest"/><category scheme="http://www.blogger.com/atom/ns#" term="debounce"/><category scheme="http://www.blogger.com/atom/ns#" term="filter"/><category scheme="http://www.blogger.com/atom/ns#" term="FlatMap"/><category scheme="http://www.blogger.com/atom/ns#" term="map"/><category scheme="http://www.blogger.com/atom/ns#" term="merge"/><category scheme="http://www.blogger.com/atom/ns#" term="Observable"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><category scheme="http://www.blogger.com/atom/ns#" term="startWith"/><category scheme="http://www.blogger.com/atom/ns#" term="Switch"/><category scheme="http://www.blogger.com/atom/ns#" term="zip"/><title type='text'>[STUDY] RxAndroid Part 5 (Observable 변형/가공/합성 - map/flatMap/zip)</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;strong style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;1. Observable 변형 및 가공&amp;nbsp;&lt;/strong&gt;&lt;span style=&quot;background-color: white; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
1) map()&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
2) flatMap()&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
3) Filter()&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
4) 기타&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;2. Observable 합성&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
1) zip()&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
2) 기타&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. Observable 변형 및 가공&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
발생되는 이벤트를 다른 형태로 변형하기를 원하실 수도 있습니다.&lt;br /&gt;가장 많이 사용되는건 map 과 flatMap 입니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1) map()&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
map() 함수를 사용하여&amp;nbsp;&lt;u&gt;전달받은 이벤트를 다른값으로 변경&lt;/u&gt;합니다.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void map() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;Observable.from&lt;/strong&gt;(new String[] { &quot;개미&quot;, &quot;매&quot;, &quot;마루&quot; })&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;map(text -&amp;gt; &quot;** &quot; + text + &quot; **&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;strong&gt;subscribe&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onNext : &quot; + text),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onError&quot;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; () -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onCompleted&quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 결과&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : ** 개미 **&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : ** 매 **&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : ** 마루 **&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onCompleted&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;strong&gt;Observable.just&lt;/strong&gt;(&quot;hello world&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;.map(new Func1&amp;lt;String, String&amp;gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String call(String s) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return s + &quot;RxJava&quot;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;.subscribe&lt;/strong&gt;(new Action1&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void call(String s) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.i(TAG, &quot;&amp;gt;&amp;gt;&amp;gt; onNextAction&amp;nbsp; : &quot; + s);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) flatMap()&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
flatMap()은&amp;nbsp;&lt;u&gt;전달받은 이벤트로부터 다른 Observable 들을 생성하고, 그 Observable 들에서 발생한 이벤트들을 쭉 펼쳐서 전파&lt;/u&gt;합니다.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void flatMap() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;Observable.from&lt;/strong&gt;(new String[] { &quot;개미&quot;, &quot;매&quot;, &quot;마루&quot; })&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;.flatMap(&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text -&amp;gt; Observable.from(new String[] { text + &quot; 사랑합니다.&quot;, text + &quot; 고맙습니다.&quot; })&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;strong&gt;subscribe&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onNext : &quot; + text),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onError&quot;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; () -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onCompleted&quot;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 결과&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 개미 사랑합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 개미 고맙습니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 매 사랑합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 매 고맙습니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 마루 사랑합니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 마루 고맙습니다.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onCompleted&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Filter()&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;데이터 filter 역할&lt;/u&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;Observable.just&lt;/strong&gt;(&quot;hello world&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;.filter(new Func1&amp;lt;String, Boolean&amp;gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Boolean call(String s) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s.contains(&quot;hello&quot;)) {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;.subscribe&lt;/strong&gt;(new Action1&amp;lt;String&amp;gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void call(String s) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.i(TAG, &quot;&amp;gt;&amp;gt;&amp;gt; onNextAction&amp;nbsp; : &quot; + s);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;위와 같이 filter 함수를 보면 observable 을 통해서 넘어온 데이터에 hello 가 포함되어있는지를 확인 하고 있다.&lt;br /&gt;
포함되어 있지 않으면 false 가 넘어가게 되어서 subscribe 가 호출되지 않는다.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4) 기타&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
map() / 특정 Func 객체를 받아서 옵저버블이 발행하는 모든 값에 Func 객체를 적용&lt;br /&gt;flatMap() / 모든 발행한 값을 하나의 최종 옵저버블로 병합하는 방식으로 시퀀스를 플랫하게 만드는 방법을 제공&lt;br /&gt;concatMap() / 발행한 값을 병합하는 대신, 발행한 값을 연쇄적으로 연결할 수 있는 플랫한 함수를 제공해 flatMap()의 인터리빙 문제를 해결&lt;br /&gt;flatMapIterable() / 소스 아이템과 생성된 옵저버블 간에 쌍이 되는 것이 아니라 소스 아이템과 생성된 이터러블이 한 쌍이 됨&lt;br /&gt;switchMap() / 소스 옵저버블에서 새로운 아이템을 발행할 때마다 먼저 발행한 아이템이 생성한 옵저버블의 구독을 해지하고 미러링을 중지한 다음 새로 발행한 아이템을 미러링&lt;br /&gt;scan() / 옵저버블이 발행하는 각 아이템에 함수를 적용해 함수 결과를 계산한 다음, 결과를 옵저버블 시퀀스에 다시 주입해 다음번에 발행되는 값과 함께 사용하기 위해 대기&lt;br /&gt;groupBy() / 특정 기준에 따라 리스트의 요소를 분류하는 함수&lt;br /&gt;buffer() / 소스 옵저버블을 새로운 옵저버블로 변환하며, 새로운 옵저버블은 하나의 아이템이 아닌 리스트 형태로 값을 발행&lt;br /&gt;window() / buffer()와 유사하지만, 리스트가 아닌 옵저버블을 발행&lt;br /&gt;cast() / map() 연산자의 특수 버전으로 소스 옵저버블의 각 아이템을 다른 Class로 캐스팅해 새로운 타입으로 변환&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
filter(return E) / return E값이 true일 때만 값이 발행되고 옵저버에게 전달&lt;br /&gt;take(n) / 옵저버블을 1번째부터 n번째까지만 발행 -&amp;gt; 쉽게 알 수 있는 아이템의 소규모 그룹을 얻기 위해 사용&lt;br /&gt;takeLast(n) / 옵저버블의 마지막 요소 n개만큼 발행&lt;br /&gt;distinct() / 특정 값을 단 한번만 처리&lt;br /&gt;distinctUntilChanged() / 모든 중복 값은 무시하고 새로운 값만 발행&lt;br /&gt;first() / 옵저버블이 발행한 요소에서 첫번째 요소만을 발행&lt;br /&gt;last() / 옵저버블이 발행한 요소에서 마지막 요소만을 발행&lt;br /&gt;skip(n) / 옵저버블이 발행한 요소에서 처음 n개의 요소를 숨김&lt;br /&gt;skipLast(n) / 옵저버블이 발행한 요소에서 마지막 n개의 요소를 숨김&lt;br /&gt;elementAt(n) / 시퀀스에서 n번째 요소만을 발행한 후 시퀀스를 완료 (elementAtOrDefault() 는 해당 시퀀스가 없을 경우도 포함)&lt;br /&gt;sample(n, time) / n(time)마다 마지막으로 발행된 값을 발행 / 첫 번째 아이템을 발행시키기 위해서는 throttleFirst() 사용&lt;br /&gt;timeout(n, time) / 옵저버블 시퀀스 소스에 반영하며 지정한 시간 내에 아무런 값을 받지 못할 경우 에러를 발행&lt;br /&gt;debounce(n, time) / 옵저버블에서 아이템이 발행된 다음 바로 뒤따라서 발행된 아이템을 필터링하고, 옵저버블에서 일정 시간 동안 다른 아이템이 발행되지 않으면 아이템을 발행&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. Observable 합성&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
두개 이상의 Observable 을 합성해야 하는 경우도 있다.&lt;br /&gt;&lt;u&gt;data-flow 에 기반한 개발에서 매우 자주 언급되고 사용되기는 하지만, 일반적인 비동기작업에서는 자주 사용하는 개념은 아니다&lt;/u&gt;.&lt;br /&gt;하지만 알고 있으면 종종 사용하게되는 유용한 도구들이니 한번쯤 살펴보고 넘어가시는걸 추천&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1) zip()&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
네트워크 작업으로 사용자의 프로필과 프로필 이미지를 동시에 요청하고, 그 결과를 합성해서 화면에 표현해준다거나 하는 형태의 작업이 필요한 경우 zip() 유용하게 사용&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void zip() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; Observable.zip&lt;/span&gt;&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;Observable.just&lt;/strong&gt;(&quot;개미&quot;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;Observable.just&lt;/strong&gt;(&quot;gaemi.jpg&quot;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (profile, image) -&amp;gt; &quot;프로필 : &quot; + profile + &quot;, 이미지 : &quot; + image&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;).subscribe&lt;/strong&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print -&amp;gt; System.out.&lt;u&gt;&lt;strong&gt;println&lt;/strong&gt;&lt;/u&gt;(&quot;onNext : &quot; + print),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onError&quot;),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; () -&amp;gt; System.out.&lt;strong&gt;&lt;u&gt;println&lt;/u&gt;&lt;/strong&gt;(&quot;onCompleted&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 결과&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onNext : 프로필 : 개미, 이미지 : gaemi.jpg&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; onCompleted&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) 기타&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
merge() / 옵저버블이 발행한 아이템을 병합하는 방식으로 2개 이상의 옵저버블을 결합&lt;br /&gt;zip() / 여러 옵저버블에서 발행한 아이템을 결합하고, 특정한 함수인 Func에 따라 아이템을 변환한 다음 새로운 값을 발행&lt;br /&gt;join() / merge()와 zip()은 발행한 아이템의 도메인에서 동작하기 때문에 값을 처리하는 방법을 결정하기 전에 시간을 고려해야 하는 시나리오가 있을 수 있는데, 해당 함수를 사용함으로 타임 윈도와 함께 동작해 두 옵저버블의 아이템을 결합 / 간단한 상황에서는 문자열과 동작하며, 단순히 발행한 문자열열을 하나의 최종 문자열로 조인하는 연산자도 있다.&lt;br /&gt;combineLatest() / zip()은 두 옵저버블의 가장 최근 언집된 아이템에서 동작하는 대신, 해당 함수는 가장 최근에 발행한 아이템에서 동작&lt;br /&gt;and(), then(), when()&amp;nbsp; /해당 함수들을 사용함으로써 패턴과 플랜 같은 구조체를 사용해 발행한 아이템을 결합&lt;br /&gt;switch() / 옵저버블을 발행하는 옵저버블을 가장 최근 발행한 옵저버블을 발행하는 옵저버블로 변환&lt;br /&gt;startWith() / 옵저버블이 아이템 발행을 시작하기 전에 인자로 전달받은 아이템의 시퀀스로 발행&lt;br /&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/8319242805754475873/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-5-observable.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8319242805754475873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8319242805754475873'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/study-rxandroid-part-5-observable.html' title='[STUDY] RxAndroid Part 5 (Observable 변형/가공/합성 - map/flatMap/zip)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-5594692498514480455</id><published>2017-06-03T23:35:00.000-07:00</published><updated>2017-06-03T23:35:54.666-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="create"/><category scheme="http://www.blogger.com/atom/ns#" term="defer"/><category scheme="http://www.blogger.com/atom/ns#" term="Empty"/><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="From"/><category scheme="http://www.blogger.com/atom/ns#" term="Interval"/><category scheme="http://www.blogger.com/atom/ns#" term="just"/><category scheme="http://www.blogger.com/atom/ns#" term="Never"/><category scheme="http://www.blogger.com/atom/ns#" term="Observable"/><category scheme="http://www.blogger.com/atom/ns#" term="operator"/><category scheme="http://www.blogger.com/atom/ns#" term="Range"/><category scheme="http://www.blogger.com/atom/ns#" term="repeat"/><category scheme="http://www.blogger.com/atom/ns#" term="repeatWhen"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><category scheme="http://www.blogger.com/atom/ns#" term="TiMER"/><title type='text'>[STUDY] RxAndroid Part 4 (Observable - Create/Defer/Empty/Never/Throw/Never/Throw/From/Interval 등)</title><content type='html'>&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Observable을 만드는 Operator 목록&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Create&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. Defer&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4. Empty/Never/Throw&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;5. From&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;6. Interval&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;7. Just&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;8. Range&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;9. Repeat&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;10. Start&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;11. Timer&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;u&gt;Observable을 좀 더 쉽게 만들 수 있는 방법이 있습니다.&lt;br /&gt;바로 미리&amp;nbsp; 생성된 Operator를 사용하는 것 입니다&lt;/u&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. Observable을 만드는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Operator&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;목록&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;u&gt;just&lt;/u&gt;&lt;/strong&gt;( ) — convert an object or several objects into an Observable that emits that object or those objects&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;from&lt;/u&gt;&lt;/strong&gt;( ) — convert an Iterable, a Future, or an Array into an Observable&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;repeat&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits a particular item or sequence of items repeatedly&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;repeatWhen&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits a particular item or sequence of items repeatedly, depending on the emissions of a second Observable&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;create&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable from scratch by means of a function&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;defer&lt;/u&gt;&lt;/strong&gt;( ) — do not create the Observable until a Subscriber subscribes; create a fresh Observable on each subscription&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;range&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits a range of sequential integers&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;interval&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits a sequence of integers spaced by a given time interval&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;timer&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits a single item after a given delay&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;empty&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits nothing and then completes&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;error&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits nothing and then signals an error&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;never&lt;/u&gt;&lt;/strong&gt;( ) — create an Observable that emits nothing at all&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;package tiii.com.rxandroid;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
import com.trello.rxlifecycle.components.support.RxAppCompatActivity;&lt;br /&gt;
import rx.Observable;&lt;br /&gt;
import rx.functions.Action1;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;public class MainActivity extends RxAppCompatActivity&lt;/strong&gt;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public static final String TAG = MainActivity.class.getSimpleName();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView(R.layout.activity_main);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;Observable&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;strong&gt;just&lt;/strong&gt;(&quot;Hello RxAndroid !!&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .compose(this.&amp;lt;String&amp;gt;bindToLifecycle())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribe(new Action1&amp;lt;String&amp;gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void call(String s) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((TextView) findViewById(R.id.textview)).setText(s);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Create&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;u&gt;수동으로&amp;nbsp;옵져버 메소드 호출하여 새로운 Observable을 생성&lt;/u&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;언뜻본다면 큰 문제는 없어 보인다.&lt;br /&gt;물론 Observable.from() 를 사용한다면 subscriber.onComplete() 와 같은 코드를 신경쓰지 않고 더 편하게 사용이 가능하다&lt;br /&gt;하지만 Observable.just() 나 Observable.from() 와 같은 경우 발행되는 Item 들이 observable 생성시점에 이미 정해져있어야 한다.&lt;br /&gt;즉 Database 상에서 데이터를 읽어 오는 작업과 같이 비용이 큰 작업들을 비동기로 처리하고자 할 때에는 적절하지 않다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;이처럼&amp;nbsp;&lt;code&gt;Observable.create()&lt;/code&gt;&amp;nbsp;만으로는 간단한 비동기 처리 흐름을 만들기는 어려운 작업이며 실수할 여지가 매우 많다.&lt;br /&gt;그래서&amp;nbsp;&lt;u&gt;많은 개발자들은&amp;nbsp;&lt;code&gt;Observable.create()&lt;/code&gt;&amp;nbsp;대신&amp;nbsp;&lt;code&gt;Observable.defer()&lt;/code&gt;&amp;nbsp;를 사용하는걸 추천&lt;/u&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;
&lt;img alt=&quot;Create&quot; src=&quot;http://reactivex.io/documentation/operators/images/create.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;br /&gt;
&lt;div style=&quot;color: #010101; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace !important; line-height: 16.9px; margin: 0px; padding: 0px;&quot;&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&lt;strong&gt;Observable.create&lt;/strong&gt;(&lt;span style=&quot;color: #a71d5d;&quot;&gt;new&lt;/span&gt;&amp;nbsp;Observable.OnSubscribe&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Override&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;void&lt;/span&gt;&amp;nbsp;call(Subscriber&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;?&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;super&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;subscriber)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subscriber.onNext(&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;Hello_Create&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subscriber.onCompleted();&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subscriber.onError(e);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
})&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
.compose(mMainView.ActivityLifecycleProvider().bindToLifecycle())&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
.observeOn(AndroidSchedulers.mainThread())&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
.subscribe(s&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.d(TAG,&amp;nbsp;s);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMainView.TextChange(s);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throwable&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;throwable.printStackTrace(),&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.d(TAG,&amp;nbsp;&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;onComplete&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LogTextView();&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
);&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. Defer&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;구독하기 전까지 Observable을 생성하지 않습니다. 그리고 각각의 옵져버에게 매번 새로운 Observable을 생성합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;다른 생성 오퍼레이터와 다른 점이 뭔지 애매했었는데 데이타스트림이 메모리에 할당되는 타이밍이 다른 것이 였습니다.&amp;nbsp;&lt;u&gt;다른 오퍼레이터들은 오퍼레이터를 선언하는 순간 메모리에 할당 되지만 defer는 subscribe가 호출 될 때에 할당 된다고 합니다&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;img alt=&quot;Defer&quot; src=&quot;http://reactivex.io/documentation/operators/images/defer.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;Observable.defer&lt;/strong&gt;(()&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;SomethingLongTask();&amp;nbsp;//return&amp;nbsp;Observable&amp;lt;String&amp;gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
})&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
.compose(mMainView.ActivityLifecycleProvider().bindToLifecycle());&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
.observeOn(AndroidSchedulers.mainThread())&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
.subscribe(s&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.d(TAG,&amp;nbsp;s);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mMainView.TextChange(s);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throwable&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;throwable.printStackTrace(),&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Log.d(TAG,&amp;nbsp;&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;onComplete&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LogTextView();&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
);&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;u&gt;Observable.defer() 비동기로 observable 을 생성하고 하위 스트림에서 사용할 수 있도록 해준다&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;Observable.defer(()&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;-&amp;gt; {&lt;br /&gt;
&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp; List&amp;lt;Book&amp;gt; books = dao.findAll();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Observable.just(books);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; })&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp; .subscribeOn(Schedulers.io())&lt;br /&gt;
&amp;nbsp; .subscribe(books -&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Next Step&lt;br /&gt;
&amp;nbsp; }, throwable -&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Error handling&lt;br /&gt;
&amp;nbsp; });&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #eaeaea; border-bottom: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); height: 22px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;여기서는 dao.findAll() 을 통해 반환된 결과를 Observable.just() 를 사용하여 새로운 작업흐름을 만들고 반환하였다.&lt;br /&gt;
observable 을 만들기 위한 observable 이 필요하다는 점에서 추가되는 비용이 있지만 Observable.create() 보다는 훨씬 간결한 코드가 만들어졌다.&lt;br /&gt;
명시적으로 onComplete() 나 onError() 를 처리해줄 필요가 없으며, subscriber 의 구독상태를 확인할 필요도 없다.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. Empty/Never/Throw&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
매우 정확하고 제한적인 행동의 Observable을 생성합니다.&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1) Empty&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;방출하는 아이템이 없고 정상적으로 종료되는 옵저버블을 생성합니다.&lt;br /&gt;&lt;img alt=&quot;Empty&quot; src=&quot;http://reactivex.io/documentation/operators/images/empty.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2) Never&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;방출하는 아이템이 없고 종료되지 않는 옵저버블을 생성합니다.&lt;br /&gt;&lt;img alt=&quot;Never&quot; src=&quot;http://reactivex.io/documentation/operators/images/never.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3) Throw&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;방출하는 아이템이 없고 에러를 발생하여 종료되는 옵저버블을 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
&lt;img alt=&quot;Throw&quot; src=&quot;http://reactivex.io/documentation/operators/images/throw.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;5. From&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;배열이나 Iterable의 요소를 순차적으로 방출 시키는 Observable으로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;img alt=&quot;에서&quot; src=&quot;http://reactivex.io/documentation/operators/images/from.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;6.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Interval&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #010101; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace !important; font-size: 13px; line-height: 16.9px; margin: 0px; padding: 0px;&quot;&gt;
&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;line-height: 16.9px; padding: 0px 6px; white-space: pre;&quot;&gt;
&lt;ul style=&quot;padding-left: 20px;&quot;&gt;&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;특정한 시간 간격으로 아이템을 방출하는 Observable을 생성합니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;일정시간 마다 반복적인 작업이 필요할 때 사용&lt;/li&gt;
&lt;/span&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;
&lt;img alt=&quot;Interval&quot; src=&quot;http://reactivex.io/documentation/operators/images/interval.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;li style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;7. Just&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul style=&quot;padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;오브젝트나 오브젝트셋을 바로 방출하는 Oservable으로 변환&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;만약에 아무것도 하지 않는 옵저버블을 만들기 위해 null 을 넣는다면 null을 방출하는 옵저버블이 만들어 집니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;아무것도 하지 않은 옵저버블을 원하신다면 empty를 사용하시면 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Just&quot; src=&quot;http://reactivex.io/documentation/operators/images/just.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;8. Range&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul style=&quot;padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;정수의 순차적인 범위를 가지고 있는 Observable을 생성&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Interval과 비슷하지만 반복횟수의 제한이 있습니다. m개 만큼의 반복&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Range&quot; src=&quot;http://reactivex.io/documentation/operators/images/range.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 616px;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;9. Repeat&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul style=&quot;padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;일정 횟수를 반복하는 Observable을 생성&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;이 오퍼레이터는 단독으로 사용되지 않고 다른 오퍼레이터 뒤에 붙여서 사용되며 .Repeat(n) 바로 앞 오퍼레이터를 일정횟수 만큼 반복&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Repeat&quot; src=&quot;http://reactivex.io/documentation/operators/images/repeat.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 616px;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;10. Start&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;ul style=&quot;padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;함수의 결과 값을 방출하는 Observable을 생성&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;a href=&quot;https://github.com/ReactiveX/RxJavaAsyncUtil&quot; style=&quot;border-bottom: 1px dashed rgb(132, 0, 0); color: black; text-decoration-line: none;&quot;&gt;https://github.com/ReactiveX/RxJavaAsyncUtil&lt;/a&gt;을 디펜던시에 추가해야 사용 할 수 있다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;추가한 디펜던시에서 사용할 수 있는 오퍼레이터는 아래의 링크에서확인이 가능 합니다.&amp;nbsp;&lt;a href=&quot;https://github.com/ReactiveX/RxJava/wiki/Async-Operators&quot; style=&quot;border-bottom: 1px dashed rgb(132, 0, 0); color: black; text-decoration-line: none;&quot;&gt;https://github.com/ReactiveX/RxJava/wiki/Async-Operators&lt;/a&gt;&lt;br /&gt;Start&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Start&quot; src=&quot;http://reactivex.io/documentation/operators/images/start.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;11. Timer&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;&lt;ul style=&quot;padding-left: 20px;&quot;&gt;&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;일정 시간의 딜레이 이후에 단일 항목을 방출하는 Observable을 생성&lt;/li&gt;
&lt;/span&gt;&lt;/ul&gt;
&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;;&quot;&gt;&lt;img alt=&quot;Timer&quot; src=&quot;http://reactivex.io/documentation/operators/images/timer.c.png&quot; style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: none; border-image-width: initial; border-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, sans-serif; font-size: 16px; line-height: 20px; vertical-align: middle; width: 750px;&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;color: #010101; font-family: &amp;quot;consolas&amp;quot;; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em&gt;&lt;u&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/5594692498514480455/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/06/1.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5594692498514480455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5594692498514480455'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/06/1.html' title='[STUDY] RxAndroid Part 4 (Observable - Create/Defer/Empty/Never/Throw/Never/Throw/From/Interval 등)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-2025386362395447098</id><published>2017-05-20T02:24:00.000-07:00</published><updated>2017-06-04T22:14:11.135-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="compose"/><category scheme="http://www.blogger.com/atom/ns#" term="CompositeSubscription"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><category scheme="http://www.blogger.com/atom/ns#" term="RxJava"/><category scheme="http://www.blogger.com/atom/ns#" term="RxLifecycle"/><title type='text'>[STUDY] RxAndroid Part 3 (메모리 누수 - RxLifecycle, compose / CompositeSubscription)</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;

&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Rxandroid 메모리누수&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. RxLifecycle 사용법(compose)&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. RxJava의&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Lifecycle 사용방법 -&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;CompositeSubscription&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;4. MVP 패턴에서의 CompositeSubscription&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. Rxandroid 메모리누수&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
Rxandroid 는 메모리누수에 대한 문제점이 있는데,&lt;br /&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;u&gt;Observable이 Context를 복사해서 유지하고 있기 때문에 엑티비티가 종료 될때&amp;nbsp;&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;u&gt;unsubscribe하지 않으면 안된다&lt;/u&gt;.&amp;nbsp;&lt;/span&gt;기본 예제에서는 명시적으로&amp;nbsp;&lt;u&gt;onPause 나 onDestory에&amp;nbsp;명시적으로 unsubscribe()를 호출하도록 되어 있다.(&lt;/u&gt;참고로 정상적으로 onComplete()나 onError()콜백으로 진입 하게 되면 알아서 unsubscribe()된다)&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;=&amp;gt; 이러한 부분을 쉽게 사용하기 위해서&amp;nbsp;RxLifecycle 라이브러리를 사용하면 쉽게 사용 할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. RxLifecycle 사용법(compose)&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
&lt;u&gt;Activity의 상속을 RxAppCompatActivity으로 변경하고 compose를 사용하여 Rxlifecycle을 적용해 줍니다&lt;/u&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
onCreate 에서 subscribe을 하면 onDestory 에서 자동으로 unsubscribe 되고 onResume 에서 subscribe을 하면 onPause 에서 자동으로 unsubscribe 됩니다.&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
&lt;u&gt;만약에 종료되는 시점은 바꾸고 싶다면 직접 bindUntilEvent 선언하여 조정할 수 있습니다&lt;/u&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
프로젝트에 의존성 추가&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; height: auto; max-width: 100%; width: 614px;&quot;&gt;&lt;img src=&quot;http://cfile21.uf.tistory.com/image/2144913856C542112C8CC2&quot; filemime=&quot;image/png&quot; filename=&quot;3.PNG&quot; height=&quot;62&quot; style=&quot;height: auto; max-width: 100%;&quot; width=&quot;614&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
package tiii.com.rxandroid;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.util.Log;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
import com.trello.rxlifecycle.ActivityEvent;&lt;br /&gt;
import com.trello.rxlifecycle.components.support.RxAppCompatActivity;&lt;br /&gt;
import rx.Observable;&lt;br /&gt;
import rx.Subscriber;&lt;br /&gt;
public class&amp;nbsp;&lt;strong&gt;MainActivity extends RxAppCompatActivity&lt;/strong&gt;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public static final String TAG = MainActivity.class.getSimpleName();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView(R.layout.activity_main);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable&amp;lt;String&amp;gt; simpleObservable =&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable.create(new Observable.OnSubscribe&amp;lt;String&amp;gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void call(Subscriber&amp;lt;? super String&amp;gt; subscriber) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onNext(&quot;Hello RxAndroid !!&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subscriber.onCompleted();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // `this.&amp;lt;String&amp;gt;` is necessary if you&#39;re compiling on JDK7 or below.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // If you&#39;re using JDK8+, then you can safely remove&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;.compose(this.&amp;lt;String&amp;gt;bindToLifecycle());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //.compose(this.&amp;lt;String&amp;gt;bindUntilEvent(ActivityEvent.DESTROY));&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; simpleObservable.subscribe(new Subscriber&amp;lt;String&amp;gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onCompleted() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.d(TAG, &quot;complete!&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onError(Throwable e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Log.e(TAG, &quot;error: &quot; + e.getMessage());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onNext(String text) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((TextView) findViewById(R.id.textview)).setText(text);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. RxJava의&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Lifecycle 사용방법 -&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;nbsp;CompositeSubscription&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;u&gt;RxJava에는 CompositeSubscription이라는 클래스를 제공&amp;nbsp;&lt;/u&gt;한다. 이 클래스는 생성된 Subscription인스턴스를 하나로 관리 해주는 클래스 이다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
CompositeSubscription클래스의 remove()메소드를 보면, Removes a Subscription from this CompositeSubscription, and unsubscribes the Subscription.이라고 되어 있다. 이 CompositeSubscription에 add()된 Subscription에 remove()메소드를 콜하면 CompositeSubscripnt에서 제거 되면 동시에 unsubscribe된다고 명시 되어 있다&lt;br /&gt;
Activity나 Fragment등의 onCreate()메소드 에서는 멤버변수로 존재 하는 CompositeSubscription인스턴스를 생성 하는 기능이 들어 간다.&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
어떠한 작업을 위해서 subscribe()를 하게 되면 Subscription인스턴스를 변수로 정의 한 다음 CompositeSubscription에 add()해 준다. Activity나 Fragment등의 onDestroy()메소등에서는 생성된 인스턴스로 존재 하는 CompositeSubscription인스턴스를 unsubscribe()한다. Activity나 Fragment에서 생성되어지고 add()된 모든 Rx의 subscribe들은 이제 unubcribe()될 것 이다.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;public class MainActivity&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; extends Activity {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;strong&gt;private CompositeSubscription compositeSubscription;&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; protected void&amp;nbsp;&lt;strong&gt;onCreate&lt;/strong&gt;(Bundle savedInstanceState) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;compositeSubscription = new CompositeSubscription();&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Observable&amp;lt;String&amp;gt; observable = Observable.create(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (Observable.OnSubscribe&amp;lt;String&amp;gt;) subscriber -&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Subscription subscription = observable&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .observeOn(Schedulers.computation())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribeOn(AndroidSchedulers.mainThread())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .subscribe(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s -&amp;gt; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;nbsp;compositeSubscription.add(subscription);&lt;/strong&gt;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; protected void&amp;nbsp;&lt;strong&gt;onDestroy&lt;/strong&gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;if (compositeSubscription != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compositeSubscription.unsubscribe();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onDestroy();&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;4. MVP 패턴에서의 CompositeSubscription&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
위의 3번 방법에서는 Activity나 Fragment에 바로 Subscription을 생성하고 멤버변수로 CompositeSubscription을 생성하여 add(), unsubscribe()하는 것을 알 수 있다.&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
하지만, MVP패턴에서는 Subscription을 실제로 생성하고 비동기 작업을 요청 하는곳이 Activity나 Fragment가 아닌 Presenter에서 하게 된다. Presenter에 CompositeSubscription을 멤버로 두고 관리하게 하는건 무리가 없을것이다. 하지만&amp;nbsp;&lt;u&gt;Activity나 Fragment의 Lifecycle에 맞추어 Subscription을 관리 하려 하는 목적에 어긋난다&lt;/u&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;div style=&quot;clear: none; float: none;&quot;&gt;
아래 소스는 Presenter의 부모 클래스로서 CompositeSubscription에 Subscriber를 등록 하고 destroy()메소드를 액티비티나 프래그먼트의 라이프 사이클에 맞추어 콜 하는 그 예 이다.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; height: 24px; line-height: normal; width: 464px;&quot;&gt;&amp;nbsp;&lt;strong&gt;public class BasePresenter&lt;/strong&gt;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&lt;strong&gt;&amp;nbsp;private CompositeSubscription compositeSubscriptionl;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public&amp;nbsp;&lt;strong&gt;BasePresenter&lt;/strong&gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; this.compositeSubscriptionl = new CompositeSubscription();&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public &amp;lt;T&amp;gt; void&amp;nbsp;&lt;strong&gt;addSubscriber&lt;/strong&gt;(@NonNull Subscriber&amp;lt;T&amp;gt; subscriber) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (compositeSubscriptionl != null) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compositeSubscriptionl.add(subscriber);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; public void&amp;nbsp;&lt;strong&gt;destroy&lt;/strong&gt;() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (compositeSubscriptionl != null) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; compositeSubscriptionl.unsubscribe();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
1) Presenter의 부모 클래스를 만들고 CompositeSubscription의 멤버변수를 추가 한다.&lt;br /&gt;
2) 부모 클래스의 생성자에서는 CompositeSubscription의 인스턴스를 생성 한다.&lt;br /&gt;
3) 부모 클래스에는 만들게 될 Subscriber의 인스턴스를 add()하는 메소드와 lifecycle의 onDestroy()에 맞춰 unsubscribe()하는 메소드인destroy()`메소드를 추가 한다.&lt;br /&gt;
4) 앞으로 만들게 되는 모든 Presenter들은 부모 Presenter를 상속해서 만든다.&lt;br /&gt;
5) 그리고 Activity나 Fragment를 상속한 부모 클래스들을 또 만들고, onCreate()메소드 군 에서는 presenter의 인스턴스를 생성 한다.&lt;br /&gt;
6) 또한 onDestroy()에서는 presenter의 destroy()메소드를 꼭 호출 하여 생성된 모든 Subscription을 unsubscribe()하게 해 준다.&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;u&gt;&lt;span style=&quot;color: red;&quot;&gt;이러한 부분이 번거롭다면, 그냥&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;Trello에서 개발 한 RxLifecycle을 사용 하자!&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;clear: none; float: none; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em&gt;&lt;u&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/2025386362395447098/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/05/study-rxandroid-part-3-rxlifecycle.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/2025386362395447098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/2025386362395447098'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/05/study-rxandroid-part-3-rxlifecycle.html' title='[STUDY] RxAndroid Part 3 (메모리 누수 - RxLifecycle, compose / CompositeSubscription)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-4350259877154498807</id><published>2017-05-20T02:22:00.002-07:00</published><updated>2017-06-04T22:15:34.125-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Observable"/><category scheme="http://www.blogger.com/atom/ns#" term="reactivex"/><category scheme="http://www.blogger.com/atom/ns#" term="rx-preferences"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><category scheme="http://www.blogger.com/atom/ns#" term="RxBinding"/><category scheme="http://www.blogger.com/atom/ns#" term="RxLifecycle"/><category scheme="http://www.blogger.com/atom/ns#" term="scheduler"/><category scheme="http://www.blogger.com/atom/ns#" term="SqlBrite"/><category scheme="http://www.blogger.com/atom/ns#" term="subscriber"/><category scheme="http://www.blogger.com/atom/ns#" term="Subscription"/><title type='text'>[STUDY] RxAndroid Part 2 (개념 - Gradle 설정/Rx핵심개념 : Observable,Subscriber, Subscription , Scheduler )</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;

&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1.&amp;nbsp;Gradle&amp;nbsp;설정&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. Rx의 핵심개념&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Observable&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Subscriber&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Subscription&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Scheduler&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1.&amp;nbsp;Gradle 설정&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
안드로이드 스튜디오에서 프로젝트를 만들고&amp;nbsp;&lt;u&gt;&lt;b&gt;app 디렉토리의 build.gradle 파일&lt;/b&gt;&lt;/u&gt;을 열어 봅시다.&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; font-size:13px=&quot;&quot; sans-serif=&quot;&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; font-size: 13px; height: 24px; line-height: normal; width: 464px;&quot;&gt;dependencies {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; compile fileTree(dir: &#39;libs&#39;, include: [&#39;*.jar&#39;])&lt;br /&gt;
&amp;nbsp; &amp;nbsp; testCompile &#39;junit:junit:4.12&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; compile &#39;com.android.support:appcompat-v7:23.1.1&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;u&gt;compile &#39;io.reactivex:rxandroid:1.1.0&#39;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
Gradle 설정에서 가장 중요한 부분은 의존성입니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
안드로이드도 자바 환경이기 때문에 rxjava를 포함하지 않는 것에 의아할 수 있습니다.&amp;nbsp;&lt;u&gt;RxAndorid는 RxJava에 대한 의존성을 가지고 있고 RxAndroid를 의존성에 포함하면 안드로이드 개발 환경에 문제가 없습니다&lt;/u&gt;. 혹시 새로운 버전을 적용하길 원한다면 명시적으로 지정할 수 있습니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;지금은 Rxandroid는 1.1.0 이고 Rxjava는 1.1.1 이라 별도로 의존성을 추가해 줬다.&lt;br /&gt;그리고 build.gradle 파일을 동기화 해주면 적용은 끝난다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;1.0 이하 버전에서는 각종 컴포넌트의 이벤트를 처리 부분이 포함되어 있었으나&lt;br /&gt;라이브러리의 경량화와 유지보수등의 문제로 서드파티 라이브러리로 빼버렸다고 한다. 아래 외에도 다양한 라이브러리가 있으니 gitHub를 찾아보면 됨&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; height: auto; line-height: 1.5; max-width: 100%; width: 547px;&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/2270C53C56C5291F2C6951&quot; filemime=&quot;image/png&quot; filename=&quot;2.PNG&quot; height=&quot;215&quot; style=&quot;height: auto; max-width: 100%;&quot; width=&quot;547&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;RxLifecycle&amp;nbsp;&lt;/b&gt;- Lifecycle handling APIs for Android apps using RxJava&lt;br /&gt;
&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;RxBinding&amp;nbsp;&lt;/b&gt;- RxJava binding APIs for Android&#39;s UI widgets.&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;SqlBrite&amp;nbsp;&lt;/b&gt;- A lightweight wrapper around SQLiteOpenHelper and ContentResolver which introduces reactive stream semantics to queries.&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;Android&lt;/b&gt;-ReactiveLocation - Library that wraps location play services API boilerplate with a reactive friendly API.&lt;/span&gt;&lt;span style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;rx-preferences&lt;/b&gt;&amp;nbsp;- Reactive SharedPreferences for Android&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. Rx의 핵심개념&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Observable&amp;nbsp;&lt;/strong&gt;:&amp;nbsp;&lt;u&gt;아이템을 발행하는 일&lt;/u&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Subscriber(Observer)&amp;nbsp;&lt;/strong&gt;:&amp;nbsp;&lt;u&gt;발행한 아이템을 소비&amp;nbsp;&lt;/u&gt;/ Subscriber는 onNext() , onComplete(), onError()를 각각 가지고 있는데, onNext()는 여러번 호출 될 수 있고 이후에 onComplete(), onError()이 처리 / Observable 안에는 Subscriber를 가지고 있어서 onNext를 호출하면 다음에 있는 Observable 이나 Subscriber가 받을 수 있음&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Subscription :&amp;nbsp;&lt;/strong&gt;Observable이 방출한 아이템을 Observer가 구독해서 반응을 합니다. 바로 이 때&amp;nbsp;&lt;u&gt;Observable과 Observer의 연결을 Subscription을 통해서 이루어 집니다&lt;/u&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;strong&gt;Scheduler :&amp;nbsp;&lt;/strong&gt;멀티쓰레드, 비동기 방식 등에 유용하며,&amp;nbsp;&lt;u&gt;Scheduler는 해당 Observable, Operator, Subscriber를 어떤 스레드에서 수행할지 결정&lt;/u&gt;하는 것입니다. 스케줄러가 어떤 부분을 맞게 되는지는 subscribeOn과 observeOn으로 지정합니다&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;Observable과 Subscriber를 주목&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 2em;&quot;&gt;
데이터의 강을 만드는 Observable과 강에서 데이터를 하나씩 건지는 Subscriber가 리액티브 프로그래밍의 가장 핵심적인 요소입니다. Observable은 데이터를 제공하는 생산자로 세가지 유형의 행동을 합니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
onNext - 새로운 데이터를 전달한다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
onCompleted - 스트림의 종료.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; margin-left: 4em;&quot;&gt;
onError - 에러 신호를 전달한다&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;txc-table&quot; font-size:13px=&quot;&quot; sans-serif=&quot;&quot; style=&quot;border-collapse: collapse; border-color: initial; border-style: none; border-width: medium; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; width: 464px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #bdbdbd; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; font-size: 13px; height: 24px; line-height: normal; width: 464px;&quot;&gt;package io.realm.simpleobservable;&lt;br /&gt;
&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.support.v7.app.ActionBarActivity;&lt;br /&gt;
import android.util.Log;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
&lt;br /&gt;
import rx.Observable;&lt;br /&gt;
import rx.Subscriber;&lt;br /&gt;
&lt;br /&gt;
public class MainActivity extends ActionBarActivity {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; private static final String TAG = MainActivity.class.getName();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Observable&amp;lt;String&amp;gt; simpleObservable =&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Observable.create(new Observable.OnSubscribe&amp;lt;String&amp;gt;() {&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void call(Subscriber&amp;lt;? super String&amp;gt; subscriber) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subscriber.onNext(&quot;Hello RxAndroid !!&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; subscriber.onCompleted();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; simpleObservable&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .subscribe(new Subscriber&amp;lt;String&amp;gt;() {&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Overridea&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void&amp;nbsp;&lt;b&gt;onCompleted&lt;/b&gt;() {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.d(TAG, &quot;complete!&quot;);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void&amp;nbsp;&lt;b&gt;onError&lt;/b&gt;(Throwable e) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.e(TAG, &quot;error: &quot; + e.getMessage());&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void&amp;nbsp;&lt;b&gt;onNext&lt;/b&gt;(String text) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ((TextView) findViewById(R.id.textView)).setText(text);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
}&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em&gt;&lt;u&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/4350259877154498807/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/05/study-rxandroid-part-2-gradle-rx.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4350259877154498807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4350259877154498807'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/05/study-rxandroid-part-2-gradle-rx.html' title='[STUDY] RxAndroid Part 2 (개념 - Gradle 설정/Rx핵심개념 : Observable,Subscriber, Subscription , Scheduler )'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-5183704626474893623</id><published>2017-05-20T02:20:00.001-07:00</published><updated>2017-06-04T22:16:17.040-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reactive Extensions"/><category scheme="http://www.blogger.com/atom/ns#" term="rx"/><category scheme="http://www.blogger.com/atom/ns#" term="RxAndroid"/><title type='text'>[STUDY] RxAndroid Part 1 (개요 - Rx등장/이해 등)</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;

&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;strong&gt;[목차]&lt;/strong&gt;==================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;1. Rx(Reactive Extensions)의 등장&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2. Rx을 이해하기 위한 준비&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. Rx를 어디에 적용하고 사용할 수 있을까?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
======================================================&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;1. Rx(Reactive Extensions)의 등장&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
여러 이슈를 처리해줄 적절한 도구는 닷넷 진영에서 등장했습니다. 마이크로소프트는 옵저버 패턴과 LINQ 스타일 문법을 확장하여 비동기처리와 이벤트 기반 프로그래밍을 할 수 있다는 것을 발견하고 연구진은 이를 정립하여 반응형 확장(Rx, Reactive Extensions)을 공개하였습니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
반응성 확장은 곧 여러 기술 기반 회사들의 호응을 얻었다. 넷플릭스(Netflix)는 Rx를 자바(RxJava) 환경에 옮겼고, 사운드클라우드(SoundColud)의 마티아스 캐플러(Matthias Käppler)는 RxJava를 안드로이드까지 (RxAndroid) 확장합니다.&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;2. Rx을 이해하기 위한 준비&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;RX는&amp;nbsp;&lt;b&gt;Observer pattern&lt;/b&gt;,&amp;nbsp;&lt;b&gt;Iterator pattern&lt;/b&gt;과&amp;nbsp;&lt;b&gt;함수형 프로그래밍&lt;/b&gt;으로부터 나온 최고의 아이디어 조합이다&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;‘&lt;i&gt;CREATE(만들고)’, ‘COMBINE(조합하고)’, ‘LISTEN(들어라? - 소비하라가 맞겠죠?)’&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;ul style=&quot;padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;일단 Rx를 제대로 이해하기 위해서는 아래 항목을 알고 있다면 쉽게 이해가 될거다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;margin-left: 2em;&quot;&gt;
&lt;b&gt;observer pattern&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 2em;&quot;&gt;
&lt;b&gt;Iterator pattern&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 2em;&quot;&gt;
&lt;b&gt;Functional programming&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 2em;&quot;&gt;
&lt;b&gt;MVVM model&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 2em;&quot;&gt;
&lt;b&gt;Dataflow programming&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;3. Rx를 어디에 적용하고 사용할 수 있을까?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; padding-left: 20px;&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;비동기 통신을 순차적으로 보내고 싶다. (A작업이 끝나고 B가 시작됐으면 좋겠다.)&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;콜백을 받았는데 받는 화면이 사라져서 null에러를 뿜으면서 죽는다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;핸들러랑 콜백 지옥에 빠져서 디버깅도 힘들고 햇깔린다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;두개의 비동기 처리가 완료된 후에 결과 값을 합쳐서 하나로 만들고 싶다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;버튼을 연타로 눌러서 이벤트가 중복실행 된다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;쓰레드 관리가 힘듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;
&lt;em&gt;&lt;u&gt;출처 : 인터넷에서 RxAndroid 검색하여 필요한 정보를 다양한 사이트에서 종합하여 작성된 것입니다. 많은 사이트 내용을 종합하여 공부하여 작성하다보니 일일이 나열하지 못하였습니다. ㅈㅅ(_ _) 이글은 자유롭게 퍼 가셔서 도움이 되었으면 좋겠습니다. 감사합니다.&lt;/u&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/5183704626474893623/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2017/05/study-rxandroid-part-1-rx.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5183704626474893623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/5183704626474893623'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2017/05/study-rxandroid-part-1-rx.html' title='[STUDY] RxAndroid Part 1 (개요 - Rx등장/이해 등)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-1899121767010698326</id><published>2011-02-28T23:53:00.000-08:00</published><updated>2011-02-28T23:53:47.504-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Proguard"/><title type='text'>[Android Course][English][Theme] - Android Eclipse &quot;Proguard&quot; use</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;
src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;※ Proguard ?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;:&amp;quot;코드 난독화&amp;quot; Tool로써, 코드에서 사용된 각종 심볼들의 이름을 기계가 생성한 짤막한 대체 이름을 변경합니다.&quot;&gt;: &quot;Code obfuscation&quot; Tool by, the various symbols used in the code generated by the machine&#39;s name is short, replace the name change. &lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;따라서, 공격자는 dontAllow() 라는 메서드가 사용된다는 정보 대신 a() 라는 메서드가 사용된다는 정보만을 얻게 됩니다.&quot;&gt;Therefore, the attacker dontAllow () method is used instead of the information that a () uses a method that will give information only. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;따라서 공격자는 원본 소스코드를 참조하지 않으면 각각의 메서드들이 어떤 일을 수행하는지 직감적으로 알아채기 어렵게 됩니다&quot;&gt;Thus, the attacker does not see the original source code of each method to perform a task that is difficult to notice on a hunch &lt;br /&gt;
&lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;: 상용이던 개인용이던 안드로이드는 자바코드를 사용하기 때문에 dex tool과 jad tool등을 이용하면 decompile을 통한 reverse engineering이 가능하다.&quot;&gt;: It was personal it was a commercial Android dex tool because it uses Java code and the jad tool and you can decompile and reverse engineering is over. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;이를 해결하기 위해 코드난독화툴을 이용하여 reverse를 어렵게 하는 방법을 사용하게 된다.&quot;&gt;To solve this problem by using the code tools I Tues dock to make it difficult to reverse will be used. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;proguard는 코딩을 어떻게 하느냐에 따라 난독이 아니라, 전혀 해독이 불가하게 할수도 있다는 것이다.&quot;&gt;proguard nandokyi depending on how the coding, but there is nothing that can be decrypted is not possible. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;1. &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;75&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Install&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;76&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the latest&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;77&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;version of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;78&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;ADT&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;121&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;Window -&amp;gt; Android SDK and AVD Manager&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;122&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;123&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;124&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the latest version&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;125&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;through&lt;/span&gt;&lt;span closure_uid_n3kmen=&quot;126&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;127&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;128&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;First&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;129&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;of course&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;130&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;you are currently using&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;131&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;132&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;latest&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;133&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;version of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;134&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;ADT&lt;/span&gt; &lt;span class=&quot;hps atn&quot; closure_uid_n3kmen=&quot;135&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;(&lt;/span&gt;&lt;span closure_uid_n3kmen=&quot;136&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;after&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;137&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;138&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;8.0.1&lt;/span&gt;&lt;span closure_uid_n3kmen=&quot;139&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;140&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;must be installed&lt;/span&gt;&lt;span closure_uid_n3kmen=&quot;141&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;142&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;If you have&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;143&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;already&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;144&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;installed&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;145&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the latest&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;146&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;version of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;147&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;ADT&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;148&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;are&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;149&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;you&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;150&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;an update&lt;/span&gt;&lt;span closure_uid_n3kmen=&quot;151&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;152&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;ADT is&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;153&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;equivalent to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;154&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;update&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;155&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the application&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;156&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to determine the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;157&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;158&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;platform,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;159&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;no&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;160&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;matter&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;161&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;what&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;162&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;we do not have&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;163&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;big&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;164&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;worries&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;165&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;about&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;166&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;compatibility&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;167&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;updates&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;168&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;You may&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;169&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;boldly&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_n3kmen=&quot;170&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;without&lt;/span&gt;&lt;span closure_uid_n3kmen=&quot;171&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;2. &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;71&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Create&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;72&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a new&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;73&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;project&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;73&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;- &amp;quot;Eclipse&amp;quot;에서 &amp;quot;File &amp;gt; New &amp;gt; Android Project&amp;quot; 를 선택하셔서 새 프로젝트를 만듦&quot;&gt;- &quot;Eclipse&quot; from the &quot;File&amp;gt; New&amp;gt; Android Project&quot; on creating a new project by choosing &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;(프로젝트 루트 폴더에 2개의 파일이 생성됨)&quot;&gt;(2 files in the root folder of the project generated) &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;: &amp;quot;proguard.cfg&amp;quot;&quot;&gt;: &quot;Proguard.cfg&quot; &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;프로가드 환경 설정 파일이라고 생각하시면 되며, 기본적으로 안드로이드에 알맞은 설정 값(메니페스트에서 이름으로 참조하는 클래스는 난독화 하지 않는 등,...)을 갖고 있음으로, 개인 개발자 분들이라면 별다른 수정 없이 해당&quot;&gt;Think of it as a professional guard configuration files, and basically set the appropriate values for the Android (referenced by name in the manifest does not obfuscation, such as a class may have ,...), the private developers who, without any modification if the &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;설정 파일을 사용하시면 될 듯 합니다&quot;&gt;If you must use a configuration file seems to be &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;: &amp;quot;default.properties&amp;quot;&quot;&gt;: &quot;Default.properties&quot; &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;(프로젝트 설정 파일임) 파일을 열어서 아래와 같이 프로가드를 사용하겠다고 설정 값을 추가하시면 됩니다.&quot;&gt;(Project settings file) opens a file using the following procedure would set a guard will just add value.&lt;/span&gt;&lt;br /&gt;
=&amp;gt; proguard.config=proguard.cfg&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoRs8mjxCWBf9M78pj-prQdXNj_RTrj_yi8AssfGl8WhTo_nEKWtQd6Jk3vLElWPHJcGYyz3MrVFqA3H13oOpD05ij1MkTR-4DDH3EMekJ6EfZj8bnXE3877ZU_HkaNeyPTjsGBKg1q9I/s1600/Proguard.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;207&quot; l6=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoRs8mjxCWBf9M78pj-prQdXNj_RTrj_yi8AssfGl8WhTo_nEKWtQd6Jk3vLElWPHJcGYyz3MrVFqA3H13oOpD05ij1MkTR-4DDH3EMekJ6EfZj8bnXE3877ZU_HkaNeyPTjsGBKg1q9I/s400/Proguard.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: large;&quot;&gt;3. &lt;span class=&quot;hps&quot; closure_uid_8yi5ei=&quot;64&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Build&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;: 빌드과정에서 자동으로 &amp;quot;Proguard Tool&amp;quot;이 동작함.&quot;&gt;: The build process automatically &quot;Proguard Tool&quot; two works. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;여러분의 프로젝트 폴더에 proguard 라는 하위 폴더가 새롭게 생성되며 해당 폴더 내에, 다음의 네 가지 파일이 생성됩니다.&quot;&gt;Proguard to your project folder is a newly created sub-folders within that folder, the following four files are generated. &lt;br /&gt;
&lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;- dump.txt : 여러분의 어플리케이션에서 사용중인 클래스들의 내부 구조에 대한 대략적인 정보를 나타냅니다.&quot;&gt;- Dump.txt: Your application is being used in the internal structure of the class represents information about the rough. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;말그대로 난독화 하기 위해 소스를 분석하는 과정에서 나오는 덤프값들이겠조.&quot;&gt;Literally for obfuscation in the process of analyzing the source deompeugapdeulyigetjo out. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; title=&quot;뭐.&quot;&gt;Well. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;- mapping.txt : 이 파일은 중요합니다.&quot;&gt;- Mapping.txt: This file is important. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;난독화 과정에서 기존 클래스 혹은 메서드가 어떤 새로운 난독화된 이름으로 매핑되었는지 그 목록을 표시해 줍니다.&quot;&gt;Existing class or method is in the process of obfuscation which has been mapped to the new obfuscated name to the list, marked. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;난독화 된 어플리케이션에 발생하는 로그나, 스택 트레이스 들을 분석하기 위해서 꼭 챙겨 두셔야 합니다.&quot;&gt;Occurs in a log or application obfuscation, better prepared to analyze the stack trace is extremely important. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;- seeds.txt : 난독화 되지 않은 클래스와 멤버들의 목록입니다.&quot;&gt;- Seeds.txt: Obfuscation is a list of classes and members are not. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;- usage.txt : 사용되지 않기 때문에, apk 파일에서 제거된 코드들의 목록입니다.&quot;&gt;- Usage.txt: because they are not used, apk files are removed from the list of codes. &lt;/span&gt;&lt;span onmouseout=&quot;this.style.backgroundColor=&#39;#fff&#39;&quot; onmouseover=&quot;this.style.backgroundColor=&#39;#ebeff9&#39;&quot; style=&quot;background-color: white;&quot; title=&quot;혹시 제거되서는 안되는 메서드나 클래스가 제거되었는지 꼭 확인해 봐야 합니다.&quot;&gt;Doeseoneun removal method or class you should not have been removed, you will want to check out. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4zvcPYHzDsbb5pyKXFUc2OITO-ZMToisYOJSN0uzn-yl7AZoAts_sei8841-1nNoAq2PEadQgXXw8AASlVmT5mTAvsCkDwoeQ9rlISV8dINKz3Z_r1igTYx45je3Hs5UFlJ1tRNx5Sfg/s1600/Proguard2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; l6=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4zvcPYHzDsbb5pyKXFUc2OITO-ZMToisYOJSN0uzn-yl7AZoAts_sei8841-1nNoAq2PEadQgXXw8AASlVmT5mTAvsCkDwoeQ9rlISV8dINKz3Z_r1igTYx45je3Hs5UFlJ1tRNx5Sfg/s1600/Proguard2.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPR09JWRg7o4fK4z7Y_LCrMxOwU8yZy5Izkxpbe25mkFgoM-13NvBUzokIQOzB10tlTGKPRVjvDjeXTJXwVZUF7NMlkoWZhMxDHArqWXBEuklVToZk2WeVHROAlTtxPeK9TFK1VBBFUBs/s1600/Proguard3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; l6=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPR09JWRg7o4fK4z7Y_LCrMxOwU8yZy5Izkxpbe25mkFgoM-13NvBUzokIQOzB10tlTGKPRVjvDjeXTJXwVZUF7NMlkoWZhMxDHArqWXBEuklVToZk2WeVHROAlTtxPeK9TFK1VBBFUBs/s1600/Proguard3.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition, inquiries, or questions, please contact us.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/1899121767010698326/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishtheme-android_28.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/1899121767010698326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/1899121767010698326'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishtheme-android_28.html' title='[Android Course][English][Theme] - Android Eclipse &quot;Proguard&quot; use'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoRs8mjxCWBf9M78pj-prQdXNj_RTrj_yi8AssfGl8WhTo_nEKWtQd6Jk3vLElWPHJcGYyz3MrVFqA3H13oOpD05ij1MkTR-4DDH3EMekJ6EfZj8bnXE3877ZU_HkaNeyPTjsGBKg1q9I/s72-c/Proguard.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-4968753464608790402</id><published>2011-02-28T23:47:00.000-08:00</published><updated>2011-02-28T23:47:49.682-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Proguard"/><title type='text'>[Android 강좌][Korean][테마] - Android Eclipse &quot;Proguard&quot; 사용</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;※ Proguard ?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
:&quot;코드 난독화&quot; Tool로써, 코드에서 사용된 각종 심볼들의 이름을 기계가 생성한 짤막한 대체 이름을 변경합니다.&lt;br /&gt;
&amp;nbsp;따라서, 공격자는 dontAllow() 라는 메서드가 사용된다는 정보 대신 a() 라는 메서드가 사용된다는 정보만을 얻게 됩니다. 따라서 공격자는 원본 소스코드를 참조하지 않으면 각각의 메서드들이 어떤 일을 수행하는지 직감적으로 알아채기 어렵게 됩니다&lt;br /&gt;
: 상용이던 개인용이던 안드로이드는 자바코드를 사용하기 때문에 dex tool과 jad tool등을 이용하면 decompile을 통한 reverse engineering이 가능하다.&lt;br /&gt;
이를 해결하기 위해 코드난독화툴을 이용하여 reverse를 어렵게 하는 방법을 사용하게 된다. proguard는 코딩을 어떻게 하느냐에 따라 난독이 아니라, 전혀 해독이 불가하게 할수도 있다는 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;1. ADT 최신 버전 설치&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: &quot;Window -&amp;gt; Android SDK and AVD Manager&quot;를 통해서 최신 버전 설치.&lt;br /&gt;
: 우선 당연히 현재 사용하고 계신 ADT 를 최신 버전(8.0.1 이 후 버전)을 설치 하셔야합니다. 기존에 설치된 ADT 가 있으시면 최신 버전으로 업데이트 하시면 됩니다. ADT 를 업데이트 하는 것과, 어플리케이션 타겟 플랫폼을 결정하는 것은 별다른 상관이 없으니 호환성에 대하여 큰 걱정 하지 않고 과감하게 업데이트 하셔도 좋습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ4svfKMGdfxx4Lu705inmTPUvI97Vd0tCflUxQKCKvEX4of9pjQ_MqibfIY8LfVb_NLZTDR3Ja3CwyRgcqKzPbMRUcUdn7yfuAEazFT7SOHGM1Vo_jf4B-x3K9q9Gaec13PVO1Imx79s/s1600/Proguard.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;207&quot; l6=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ4svfKMGdfxx4Lu705inmTPUvI97Vd0tCflUxQKCKvEX4of9pjQ_MqibfIY8LfVb_NLZTDR3Ja3CwyRgcqKzPbMRUcUdn7yfuAEazFT7SOHGM1Vo_jf4B-x3K9q9Gaec13PVO1Imx79s/s400/Proguard.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;2. 신규 프로젝트 생성&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
- &quot;Eclipse&quot;에서 &quot;File &amp;gt; New &amp;gt; Android Project&quot; 를 선택하셔서 새 프로젝트를 만듦&lt;br /&gt;
(프로젝트 루트 폴더에 2개의 파일이 생성됨)&lt;br /&gt;
: &quot;proguard.cfg&quot; &lt;br /&gt;
프로가드 환경 설정 파일이라고 생각하시면 되며, 기본적으로 안드로이드에 알맞은 설정 값(메니페스트에서 이름으로 참조하는 클래스는 난독화 하지 않는 등,...)을 갖고 있음으로, 개인 개발자 분들이라면 별다른 수정 없이 해당 설정 파일을 사용하시면 될 듯 합니다&lt;br /&gt;
: &quot;default.properties&quot;&lt;br /&gt;
(프로젝트 설정 파일임) 파일을 열어서 아래와 같이 프로가드를 사용하겠다고 설정 값을 추가하시면 됩니다&lt;br /&gt;
=&amp;gt; proguard.config=proguard.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;3. 빌드&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: 빌드과정에서 자동으로 &quot;Proguard Tool&quot;이 동작함.&lt;br /&gt;
여러분의 프로젝트 폴더에 proguard 라는 하위 폴더가 새롭게 생성되며 해당 폴더 내에, 다음의 네 가지 파일이 생성됩니다. &lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;- dump.txt : 여러분의 어플리케이션에서 사용중인 클래스들의 내부 구조에 대한 대략적인 정보를 나타냅니다. 말그대로 난독화 하기 위해 소스를 분석하는 과정에서 나오는 덤프값들이겠조. 뭐. &lt;br /&gt;
- mapping.txt : 이 파일은 중요합니다. 난독화 과정에서 기존 클래스 혹은 메서드가 어떤 새로운 난독화된 이름으로 매핑되었는지 그 목록을 표시해 줍니다. 난독화 된 어플리케이션에 발생하는 로그나, 스택 트레이스 들을 분석하기 위해서 꼭 챙겨 두셔야 합니다.&lt;br /&gt;
- seeds.txt : 난독화 되지 않은 클래스와 멤버들의 목록입니다.&lt;br /&gt;
- usage.txt : 사용되지 않기 때문에, apk 파일에서 제거된 코드들의 목록입니다. 혹시 제거되서는 안되는 메서드나 클래스가 제거되었는지 꼭 확인해 봐야 합니다.&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyGCSjiDgAmtyeMVbaGGUGqKLS4gOG3XZb37-bhOkLob9usjuGWFHNjAHsw4vo-5HVIYa0qj1oTqFmu4wCnF5YIDUTBKJSnS0YuaI5D8rd2XwtC3lkmsGb8LxCvcpam8241F_Nc-6uLLk/s1600/Proguard2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; l6=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyGCSjiDgAmtyeMVbaGGUGqKLS4gOG3XZb37-bhOkLob9usjuGWFHNjAHsw4vo-5HVIYa0qj1oTqFmu4wCnF5YIDUTBKJSnS0YuaI5D8rd2XwtC3lkmsGb8LxCvcpam8241F_Nc-6uLLk/s400/Proguard2.JPG&quot; width=&quot;298&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI5IEyFnVPQ3MEJ1FKOxzcGDgUbSXwvTLOer1oetsfR6Dqr_UNO3HIo8v6xxA6lrml9T-WOT4z0EUq2TVHMydEO3RYeFMGqBj_gthZC8zK6AvFZ-9xCRRwLH9uFSIcDxR5mO4yvAxPiYQ/s1600/Proguard3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; l6=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI5IEyFnVPQ3MEJ1FKOxzcGDgUbSXwvTLOer1oetsfR6Dqr_UNO3HIo8v6xxA6lrml9T-WOT4z0EUq2TVHMydEO3RYeFMGqBj_gthZC8zK6AvFZ-9xCRRwLH9uFSIcDxR5mO4yvAxPiYQ/s400/Proguard3.JPG&quot; width=&quot;233&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div align=&quot;left&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;﻿추가로 문의 사항이나, 궁금한 점이 계시면 연락주세요.&lt;/div&gt;(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)&lt;br /&gt;
※ 도움이 되셨다면, ^^. 맨 위 광고클릭 좀..ㅎㅎ &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/4968753464608790402/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-korean-android-eclipse-proguard.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4968753464608790402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4968753464608790402'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-korean-android-eclipse-proguard.html' title='[Android 강좌][Korean][테마] - Android Eclipse &quot;Proguard&quot; 사용'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ4svfKMGdfxx4Lu705inmTPUvI97Vd0tCflUxQKCKvEX4of9pjQ_MqibfIY8LfVb_NLZTDR3Ja3CwyRgcqKzPbMRUcUdn7yfuAEazFT7SOHGM1Vo_jf4B-x3K9q9Gaec13PVO1Imx79s/s72-c/Proguard.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-267430888524166592</id><published>2011-02-10T05:34:00.000-08:00</published><updated>2011-02-10T05:34:47.293-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="License Verification Library"/><category scheme="http://www.blogger.com/atom/ns#" term="LVL"/><title type='text'>[Android Course][English][Theme] - Android Market LVL(License Verification Library) Usage</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;&lt;strong&gt;※ LVL(License Verification Library) ?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;175&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;176&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;LVL&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;177&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;basically&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;178&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;179&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;application&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;180&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;181&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;one device&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;182&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to another device&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;183&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;184&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;185&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;light&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;186&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;kind&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;187&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;188&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;piracy&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;189&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;attacks&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;190&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;makes&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;191&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;(Note&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;192&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;193&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;that even if&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;194&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;piracy&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;195&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;196&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to buy&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;197&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in to your account&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;198&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;199&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;your application&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;200&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;can not run&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;201&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;202&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;203&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;If you use&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;204&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;LVL&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;205&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;206&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;207&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;application&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;208&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;at runtime&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;209&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;through&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;210&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the App&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;211&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Market&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;212&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;was&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;213&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;actually&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;214&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a purchase&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;215&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;216&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;determine if&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;217&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;218&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;application&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;219&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;220&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;If you&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;221&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;are&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;222&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;running&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;223&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a normal&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;224&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;buyer&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;225&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;1. &quot;Market Licensing Package&quot; Install&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;strong&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;235&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Window -&amp;gt; Android SDK and AVD Manager&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;236&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;through the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;237&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;installation&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;238&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;Available Packages&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;239&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;through the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;240&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;Market Licensing Package&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;241&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;installation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;strong&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;243&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Installed Packages&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;244&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Package&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;245&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is installed&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;246&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;through the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;247&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;check&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3WsSp7aE0LdpGL0hV-ZcDLPb52e6tyBFX043YQyFjfsNAXeu7nSstfrsCWVR_jEN_DO847QFg-76f2NHer-qBNqORMgm_7JFXddvjMzYI2KOD4L1z7j6cQYxrUiAoBu9vnCHjQ5cK2qI/s1600/LVL1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;231&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3WsSp7aE0LdpGL0hV-ZcDLPb52e6tyBFX043YQyFjfsNAXeu7nSstfrsCWVR_jEN_DO847QFg-76f2NHer-qBNqORMgm_7JFXddvjMzYI2KOD4L1z7j6cQYxrUiAoBu9vnCHjQ5cK2qI/s400/LVL1.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;&lt;strong&gt;2. &quot;market_licensing&quot; library&amp;nbsp;Confirm Folder&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;252&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;Android-sdk-windows \ market_licensing \ library&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;253&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;when applied&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;254&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;LVL&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;255&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;future&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;256&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;257&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Im&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;258&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;required&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;259&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;library&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;260&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7myqxzQlV3uznFdvurxPSmdILKQAvxfOwQQMhMaTKVml2NB_BfqxCTSbFEu4-XRERyFLO1KjkMumhtVxdwLBmHgaFJcLbJ4WwoIRoLG5s-pJrCgtTnombt3YEf5R0KNqo4_maFhakjp8/s1600/LVL2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7myqxzQlV3uznFdvurxPSmdILKQAvxfOwQQMhMaTKVml2NB_BfqxCTSbFEu4-XRERyFLO1KjkMumhtVxdwLBmHgaFJcLbJ4WwoIRoLG5s-pJrCgtTnombt3YEf5R0KNqo4_maFhakjp8/s640/LVL2.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;379&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: LVL&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;380&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to apply the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;381&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;library&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;382&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;can be used&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;383&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in two ways&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;384&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;385&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;386&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;387&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;link to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;388&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;389&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;390&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;project&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;391&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is the way&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;392&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;393&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;another&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;394&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;one&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;395&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;copy&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;396&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;397&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;398&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;library&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;399&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;source&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;400&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;401&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;402&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;project&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;403&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;will be&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;404&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;put&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;405&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps atn&quot; closure_uid_3a1f1a=&quot;406&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;(&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;407&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Google&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;408&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Developer&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;409&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&#39;s Guide&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;410&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;411&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;412&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;413&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;project&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;414&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to link&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;415&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;recommended.&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;416&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: large;&quot;&gt;3. Publisher &lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;688&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Account&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;689&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Settings&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;689&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;634&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: LVL&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;635&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;want to use&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;636&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;637&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;obtain&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;638&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;public key&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;639&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;from the Android Market&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;640&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;641&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Android&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;642&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Market&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;643&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Account&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;644&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, select&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;645&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Edit Profile&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;646&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;647&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;access&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;648&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;your personal&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;649&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;information&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;650&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, such as&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;651&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;setting&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;652&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;screens&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;653&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;coming out&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;654&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;down below&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;655&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;656&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Test Accounts&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;657&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;field&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;658&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;testing&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;659&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a Google account&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;660&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;661&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;put&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;662&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the address&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;663&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;664&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Public Key&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;665&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;field&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;666&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;667&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;668&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;string that&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;669&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;670&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;used in the program&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;671&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, so&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;672&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in the future&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;673&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;If you save&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;674&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;it&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;675&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, and&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;676&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Test response&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;677&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;values&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;678&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;679&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the shape&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;680&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;may&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;681&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;be&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;682&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;further&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;683&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;tested&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;684&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;685&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;license&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;686&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: large;&quot;&gt;4. &quot;LVL library Project&quot; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;691&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;Create&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;841&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;LVL library Project&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;842&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to create a&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;843&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;reason&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;844&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;845&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;every time&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;846&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;LVL library Source&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;847&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;rather than&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;848&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;copying&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;849&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;it&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;850&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;easy&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;851&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;because&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;852&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;when you add&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;853&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the reference&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;854&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;855&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Eclipse&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;856&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;from the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;857&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;File&amp;gt; New&amp;gt; Android Project&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;858&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;by choosing&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;859&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;860&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;creating&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;861&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a new&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;862&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;project&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;863&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;864&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;(&lt;span style=&quot;color: red;&quot;&gt;Contents&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;865&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;column&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;866&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;Create project from existing source&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;867&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;868&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;select&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;869&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;870&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;based&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;871&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;on a&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;872&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;copy of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;873&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;LVL library&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;874&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;folder and&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;875&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;checked&lt;/span&gt;&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;876&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;878&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Com_android_vending_licensing&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;879&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;project&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;880&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;created.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfyjOzefQwGnGG_NVil5fI17K02eIuFa1sQBu4ZPiiOhI6iYpnLa10FYgGcx7UKcXvcZ8e3C3tti2e3gpAS7XCJs4rzdXhm6Wfse-Et8hIpaqOHBgnjXIlx3F70d5fMJZbvA_-k0FXRYY/s1600/LVL3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;294&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfyjOzefQwGnGG_NVil5fI17K02eIuFa1sQBu4ZPiiOhI6iYpnLa10FYgGcx7UKcXvcZ8e3C3tti2e3gpAS7XCJs4rzdXhm6Wfse-Et8hIpaqOHBgnjXIlx3F70d5fMJZbvA_-k0FXRYY/s400/LVL3.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;5. &quot;LVL library&quot; Apply&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;882&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Test Android Project&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;883&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;884&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;create&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
(ex : LVL_Test_App)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjasb-PHo59V78ywYzt1V_nih6Dq2Onkt1UvAWq8DusCncjJhlq8cRP32-jlUOt3542te9cqr2Y877bUGgdQDMr_zJcQ4QpIknfWSdcVzoc7NkdY2W_1iQTOtFDVUiYHm1Ud2Dz5ucj5LA/s1600/LVL4.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;103&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjasb-PHo59V78ywYzt1V_nih6Dq2Onkt1UvAWq8DusCncjJhlq8cRP32-jlUOt3542te9cqr2Y877bUGgdQDMr_zJcQ4QpIknfWSdcVzoc7NkdY2W_1iQTOtFDVUiYHm1Ud2Dz5ucj5LA/s400/LVL4.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;886&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;Eclipse - Project - Properties&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;887&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;by selecting&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;888&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;additional&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;889&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;library&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;890&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLLzxQMy4eUQFPDLfbdNSC1PoogDw9ygDEc5aCI9_aE0O2lp6Xv6oa5ToGMsblZ3XL_CTfxvNzDXngty3M1vo0aIIO1htZPfDHPos9yp5ArAPa875NlEUDdxZfwC20NkAGzl-LGD0JqNg/s1600/LVL5.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;345&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLLzxQMy4eUQFPDLfbdNSC1PoogDw9ygDEc5aCI9_aE0O2lp6Xv6oa5ToGMsblZ3XL_CTfxvNzDXngty3M1vo0aIIO1htZPfDHPos9yp5ArAPa875NlEUDdxZfwC20NkAGzl-LGD0JqNg/s400/LVL5.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZpG8aglkInC7NO92SsPfX_wbohg1xsvaJfLsdsp9o7WMtOL_MrUFQ5LCyFq4cM9EIathYb3ARAz6jV9OQmHwH_0bXu29ZtuNnPjPWWmjqbirKXJuHTLGDQew5jhEJLFX_PFIMW6KrFTg/s1600/LVL6.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;364&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZpG8aglkInC7NO92SsPfX_wbohg1xsvaJfLsdsp9o7WMtOL_MrUFQ5LCyFq4cM9EIathYb3ARAz6jV9OQmHwH_0bXu29ZtuNnPjPWWmjqbirKXJuHTLGDQew5jhEJLFX_PFIMW6KrFTg/s400/LVL6.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9w-5OUYHkb8klgpH9U6r6kh_1yqvD5mejo3kvAvtLhU1tZkWoNRfKUnQLieR-As_Xu_btJLPCVslvA3YalOKdo0GafPktYJsLkA5bdNas2a8jswRge_rdfQKmkQGhnJv2PAA7VBythiA/s1600/LVL7.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;342&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9w-5OUYHkb8klgpH9U6r6kh_1yqvD5mejo3kvAvtLhU1tZkWoNRfKUnQLieR-As_Xu_btJLPCVslvA3YalOKdo0GafPktYJsLkA5bdNas2a8jswRge_rdfQKmkQGhnJv2PAA7VBythiA/s400/LVL7.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;892&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &quot;AndroidManifest.xml&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;893&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Add&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;894&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;permission&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;895&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;settings&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;897&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: LVL&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;898&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;for permission to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;899&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;900&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;with the following&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;901&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;additional&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;lt;uses-permission android:name=&quot;com.android.vending.CHECK_LICENSE /&amp;gt;&lt;br /&gt;
&amp;lt;uses-permission android:name=&quot;android.permission.READ_PHONE_STATE&quot; /&amp;gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;LVL library&quot; import&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
import android.telephony.TelephonyManager;&lt;br /&gt;
import com.android.vending.licensing.AESObfuscator;&lt;br /&gt;
import com.android.vending.licensing.LicenseChecker;&lt;br /&gt;
import com.android.vending.licensing.LicenseCheckerCallback;&lt;br /&gt;
import com.android.vending.licensing.ServerManagedPolicy;&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;LicenseCheckerCallback&quot;&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;903&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Implementation&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private class MyLicenseCheckerCallback implements LicenseCheckerCallback {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void allow() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isFinishing()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;License Authentication&quot; Success&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void applicationError(ApplicationErrorCode errorCode) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// &quot;License Authentication&quot; Error&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void dontAllow() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isFinishing()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;License Authentication&quot; Fail&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;License Authentication&quot; &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;905&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Initialization&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;906&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;907&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Run&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;907&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&lt;/span&gt;&lt;/span&gt;public class main extends Activity {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // public key&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final String BASE64_PUBLIC_KEY = &quot;public key ... &quot;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Random byte&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final byte[] SALT = {-6, 35, 50, -118, -13, -5, 73, -24, 11, 82, -15, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -12, 27, -17, -4, -113, -13, 42, -54, 79}; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private LicenseCheckerCallback m_LicenseCheckerCallback;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private LicenseChecker m_Checker;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Called when the activity is first created. */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView(R.layout.main);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;LicenseCheckerCallback&quot; Initialize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_LicenseCheckerCallback = new MyLicenseCheckerCallback();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;Devices ID&quot; Obtain&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String deviceId = tm.getDeviceId();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;LicenseChecker&quot; Initialize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Checker = new LicenseChecker( this, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;BASE64_PUBLIC_KEY);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;License Validation&quot; Exe&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Checker.checkAccess(m_LicenseCheckerCallback);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;6. APK Test&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;930&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;LVL&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;931&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to test&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;932&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;933&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;Android Market&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;934&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;will&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;935&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;be&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;936&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;up&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;937&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;938&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;fee&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;939&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;940&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;Publish&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;941&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;does not need&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;942&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to do&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;943&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;944&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, &quot;save&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;945&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;are worth&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;946&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;LVL&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;947&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;can test&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_3a1f1a=&quot;948&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;release&lt;/span&gt;&lt;span closure_uid_3a1f1a=&quot;949&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition, inquiries, or questions, please contact us.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/267430888524166592/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishtheme-android.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/267430888524166592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/267430888524166592'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishtheme-android.html' title='[Android Course][English][Theme] - Android Market LVL(License Verification Library) Usage'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3WsSp7aE0LdpGL0hV-ZcDLPb52e6tyBFX043YQyFjfsNAXeu7nSstfrsCWVR_jEN_DO847QFg-76f2NHer-qBNqORMgm_7JFXddvjMzYI2KOD4L1z7j6cQYxrUiAoBu9vnCHjQ5cK2qI/s72-c/LVL1.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-2324873389434168001</id><published>2011-02-10T05:28:00.000-08:00</published><updated>2011-02-10T05:28:26.228-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="License Verification Library"/><category scheme="http://www.blogger.com/atom/ns#" term="LVL"/><title type='text'>[Android 강좌][Korean][테마] - Android Market LVL(License Verification Library) 사용법</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;&lt;strong&gt;※ LVL(License Verification Library) ?&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
: 기본적으로 LVL 은 여러분의 어플리케이션을 한 디바이스에서 다른 디바이스로 불법 복제하는 가벼운 종류의 공격을 방어해줍니다&lt;br /&gt;
(주&amp;gt; 불법 복제하더라도 해당 계정에 어플리케이션 구매 정보가 없으면 실행할 수 없음)&lt;br /&gt;
: 나의 어플리케이션에서 LVL을 사용하면 실행시에 마켓앱을 통해 실제로 구매가 된 어플인지를 확인을 한다. 정상적인 구매자라면 실행을 하게 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;1. &quot;Market Licensing Package&quot; 설치&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: black;&quot;&gt;- &quot;Window -&amp;gt; Android SDK and AVD Manager&quot;를 통해서 설치&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: &quot;Available Packages&quot;를 통해서 &quot;Market Licensing Package&quot; 설치&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;strong&gt;- &quot;Installed Packages&quot;를 통해서 설치된 Package 확인&lt;/strong&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3WsSp7aE0LdpGL0hV-ZcDLPb52e6tyBFX043YQyFjfsNAXeu7nSstfrsCWVR_jEN_DO847QFg-76f2NHer-qBNqORMgm_7JFXddvjMzYI2KOD4L1z7j6cQYxrUiAoBu9vnCHjQ5cK2qI/s1600/LVL1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;231&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3WsSp7aE0LdpGL0hV-ZcDLPb52e6tyBFX043YQyFjfsNAXeu7nSstfrsCWVR_jEN_DO847QFg-76f2NHer-qBNqORMgm_7JFXddvjMzYI2KOD4L1z7j6cQYxrUiAoBu9vnCHjQ5cK2qI/s400/LVL1.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;&lt;strong&gt;2. &quot;market_licensing&quot; library 폴더 확인&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;: &quot;android-sdk-windows\market_licensing\library&quot; 추후 LVL 적용 시, 필요한 library 임.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7myqxzQlV3uznFdvurxPSmdILKQAvxfOwQQMhMaTKVml2NB_BfqxCTSbFEu4-XRERyFLO1KjkMumhtVxdwLBmHgaFJcLbJ4WwoIRoLG5s-pJrCgtTnombt3YEf5R0KNqo4_maFhakjp8/s1600/LVL2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7myqxzQlV3uznFdvurxPSmdILKQAvxfOwQQMhMaTKVml2NB_BfqxCTSbFEu4-XRERyFLO1KjkMumhtVxdwLBmHgaFJcLbJ4WwoIRoLG5s-pJrCgtTnombt3YEf5R0KNqo4_maFhakjp8/s640/LVL2.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;: LVL을 적용하기 위해 library를 두가지 방법으로 사용할 수 있음.&lt;br /&gt;
&amp;nbsp;- 하나는 레퍼런스 프로젝트로 연결하는 방법이고,&lt;br /&gt;
&amp;nbsp;- 다른 하나는 라이브러리 소스를 해당 프로젝트에 카피하여 넣는 것임.&lt;br /&gt;
(구글 개발자 가이드에는 레퍼런스 프로젝트로 연결하는 것을 권장함.)&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;3. Publisher 계정 설정&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: LVL을 사용하려면 안드로이드 마켓에서 public key 를 얻어야 합니다.&lt;br /&gt;
안드로이드 마켓 계정에 접속하여 Edit Profile 을 선택하면 개인 정보 설정 밑에 아래와 같은 화면이 나옴.&lt;br /&gt;
- &quot;Test Accounts&quot; 란에는 테스트할 구글 계정 주소를 넣으면 되며,&lt;br /&gt;
- &quot;Public Key&quot; 란에 있는 문자열은 추후에 프로그램에서 사용할 것이므로 잘 저장해 두면 되며,&lt;br /&gt;
- &quot;Test response&quot; 값을 바꿔가면서 추후에 라이선스 테스트를 할 수 있음.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;4. &quot;LVL library Project&quot; 생성&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: &quot;LVL library Project&quot;를 생성하는 이유는, 매번 &quot;LVL library Source&quot;를 복사하는 것 보다 바로 레퍼런스를 추가하면 편리하기 때문입니다.&lt;/div&gt;&lt;br /&gt;
- &quot;Eclipse&quot;에서 &quot;File &amp;gt; New &amp;gt; Android Project&quot; 를 선택하셔서 새 프로젝트를 만듦.&lt;br /&gt;
(&lt;span style=&quot;color: red;&quot;&gt;Contents 란에서 &quot;Create project from existing source&quot;를 선택하고, 위에서 복사해 둔 &quot;LVL library&quot; 폴더를 선택함&lt;/span&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;- &quot;com_android_vending_licensing&quot; 프로젝트 생성됨.&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfyjOzefQwGnGG_NVil5fI17K02eIuFa1sQBu4ZPiiOhI6iYpnLa10FYgGcx7UKcXvcZ8e3C3tti2e3gpAS7XCJs4rzdXhm6Wfse-Et8hIpaqOHBgnjXIlx3F70d5fMJZbvA_-k0FXRYY/s1600/LVL3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;294&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfyjOzefQwGnGG_NVil5fI17K02eIuFa1sQBu4ZPiiOhI6iYpnLa10FYgGcx7UKcXvcZ8e3C3tti2e3gpAS7XCJs4rzdXhm6Wfse-Et8hIpaqOHBgnjXIlx3F70d5fMJZbvA_-k0FXRYY/s400/LVL3.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;5. &quot;LVL library&quot; 적용&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;- &quot;Test Android Project&quot;를 생성&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
(ex : LVL_Test_App)&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjasb-PHo59V78ywYzt1V_nih6Dq2Onkt1UvAWq8DusCncjJhlq8cRP32-jlUOt3542te9cqr2Y877bUGgdQDMr_zJcQ4QpIknfWSdcVzoc7NkdY2W_1iQTOtFDVUiYHm1Ud2Dz5ucj5LA/s1600/LVL4.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;103&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjasb-PHo59V78ywYzt1V_nih6Dq2Onkt1UvAWq8DusCncjJhlq8cRP32-jlUOt3542te9cqr2Y877bUGgdQDMr_zJcQ4QpIknfWSdcVzoc7NkdY2W_1iQTOtFDVUiYHm1Ud2Dz5ucj5LA/s400/LVL4.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;Eclipse - Project - Properties&quot; 선택하여 library 추가.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLLzxQMy4eUQFPDLfbdNSC1PoogDw9ygDEc5aCI9_aE0O2lp6Xv6oa5ToGMsblZ3XL_CTfxvNzDXngty3M1vo0aIIO1htZPfDHPos9yp5ArAPa875NlEUDdxZfwC20NkAGzl-LGD0JqNg/s1600/LVL5.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;345&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLLzxQMy4eUQFPDLfbdNSC1PoogDw9ygDEc5aCI9_aE0O2lp6Xv6oa5ToGMsblZ3XL_CTfxvNzDXngty3M1vo0aIIO1htZPfDHPos9yp5ArAPa875NlEUDdxZfwC20NkAGzl-LGD0JqNg/s400/LVL5.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZpG8aglkInC7NO92SsPfX_wbohg1xsvaJfLsdsp9o7WMtOL_MrUFQ5LCyFq4cM9EIathYb3ARAz6jV9OQmHwH_0bXu29ZtuNnPjPWWmjqbirKXJuHTLGDQew5jhEJLFX_PFIMW6KrFTg/s1600/LVL6.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;364&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZpG8aglkInC7NO92SsPfX_wbohg1xsvaJfLsdsp9o7WMtOL_MrUFQ5LCyFq4cM9EIathYb3ARAz6jV9OQmHwH_0bXu29ZtuNnPjPWWmjqbirKXJuHTLGDQew5jhEJLFX_PFIMW6KrFTg/s400/LVL6.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9w-5OUYHkb8klgpH9U6r6kh_1yqvD5mejo3kvAvtLhU1tZkWoNRfKUnQLieR-As_Xu_btJLPCVslvA3YalOKdo0GafPktYJsLkA5bdNas2a8jswRge_rdfQKmkQGhnJv2PAA7VBythiA/s1600/LVL7.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; h5=&quot;true&quot; height=&quot;342&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9w-5OUYHkb8klgpH9U6r6kh_1yqvD5mejo3kvAvtLhU1tZkWoNRfKUnQLieR-As_Xu_btJLPCVslvA3YalOKdo0GafPktYJsLkA5bdNas2a8jswRge_rdfQKmkQGhnJv2PAA7VBythiA/s400/LVL7.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;AndroidManifest.xml&quot; 권한 설정 추가&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: LVL 실행을 위한 권한을 아래와 같이 추가&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&amp;lt;uses-permission android:name=&quot;com.android.vending.CHECK_LICENSE /&amp;gt;&lt;br /&gt;
&amp;lt;uses-permission android:name=&quot;android.permission.READ_PHONE_STATE&quot; /&amp;gt;&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;LVL library&quot; import&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
import android.telephony.TelephonyManager;&lt;br /&gt;
import com.android.vending.licensing.AESObfuscator;&lt;br /&gt;
import com.android.vending.licensing.LicenseChecker;&lt;br /&gt;
import com.android.vending.licensing.LicenseCheckerCallback;&lt;br /&gt;
import com.android.vending.licensing.ServerManagedPolicy;&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;LicenseCheckerCallback&quot; 구현&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private class MyLicenseCheckerCallback implements LicenseCheckerCallback {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void allow() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isFinishing()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;License Authentication&quot; Success&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void applicationError(ApplicationErrorCode errorCode) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// &quot;License Authentication&quot; Error&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void dontAllow() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (isFinishing()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;License Authentication&quot; Fail&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- &quot;License Authentication&quot; 초기화 및 실행&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
public class main extends Activity {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // public key&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final String BASE64_PUBLIC_KEY = &quot;public key ... &quot;; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Random byte&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final byte[] SALT = {-6, 35, 50, -118, -13, -5, 73, -24, 11, 82, -15, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -12, 27, -17, -4, -113, -13, 42, -54, 79}; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private LicenseCheckerCallback m_LicenseCheckerCallback;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private LicenseChecker m_Checker;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Called when the activity is first created. */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView(R.layout.main);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;LicenseCheckerCallback&quot; Initialize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_LicenseCheckerCallback = new MyLicenseCheckerCallback();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;Devices ID&quot; Obtain&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String deviceId = tm.getDeviceId();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;LicenseChecker&quot; Initialize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Checker = new LicenseChecker( this, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;BASE64_PUBLIC_KEY);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &quot;License Validation&quot; Exe&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Checker.checkAccess(m_LicenseCheckerCallback);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;6. APK 테스트&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: &quot;LVL&quot;을 테스트하기 위해서는 &quot;Android Market&quot;에 유료로 올라가 있어야 합니다.&lt;br /&gt;
: &quot;publish&quot; 까지 할 필요는 없으며, &quot;save&quot; 만 해 놓으면 LVL을 테스트할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
추가로 문의 사항이나, 궁금한 점이 계시면 연락주세요.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)&lt;br /&gt;
※ 도움이 되셨다면, ^^. 맨 위 광고클릭 좀..ㅎㅎ</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/2324873389434168001/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-korean-android-market_10.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/2324873389434168001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/2324873389434168001'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-korean-android-market_10.html' title='[Android 강좌][Korean][테마] - Android Market LVL(License Verification Library) 사용법'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3WsSp7aE0LdpGL0hV-ZcDLPb52e6tyBFX043YQyFjfsNAXeu7nSstfrsCWVR_jEN_DO847QFg-76f2NHer-qBNqORMgm_7JFXddvjMzYI2KOD4L1z7j6cQYxrUiAoBu9vnCHjQ5cK2qI/s72-c/LVL1.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-8010507834314865107</id><published>2011-02-07T05:57:00.001-08:00</published><updated>2011-02-07T05:57:51.610-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Debug certificate expired on"/><title type='text'>[Android Course][English][Theme][Error] - &quot;generating final archive: Debug certificate expired on ....&quot;</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;1. &quot;Error&quot; Cause&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;154&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;Eclpise&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;155&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;This&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;156&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;157&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;message&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;158&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;comes&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;159&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;out of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;160&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;161&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;building&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;162&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;may have&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;163&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;164&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;This&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;165&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;Debug certificate&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;166&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;has expired,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;167&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;168&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;due&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;169&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps atn&quot; closure_uid_jbf4pq=&quot;170&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;(&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;171&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Note&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;172&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;Debug certificate&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;173&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;that&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;174&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is created&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;175&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;will expire&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;176&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;after&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;177&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;365 days&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;178&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;179&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;2. &quot;Error&quot; solution&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;239&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Debug certificate&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;240&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;has expired,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;241&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;you&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;242&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;are to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;243&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;renew&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;244&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;245&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;debug.keystore&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;246&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;files are deleted&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;247&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, then&lt;/span&gt; &lt;span class=&quot;hps atn&quot; closure_uid_jbf4pq=&quot;248&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;re-&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;249&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;build of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;250&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Android apps&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;251&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;are&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;252&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;you&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;253&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps atn&quot; closure_uid_jbf4pq=&quot;254&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;(&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;255&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Note&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;256&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;: &quot;debug.keystore&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;257&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;The location&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;258&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;of the file&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;259&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&#39;Window&amp;gt; Preferences&amp;gt; Android&amp;gt; Build&#39;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;260&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;261&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&#39;Default debug keystore&#39;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;262&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;263&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;264&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;topic&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;265&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;266&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In addition, inquiries, or questions, please contact us.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/8010507834314865107/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishthemeerror.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8010507834314865107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8010507834314865107'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishthemeerror.html' title='[Android Course][English][Theme][Error] - &quot;generating final archive: Debug certificate expired on ....&quot;'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-702078970196778191</id><published>2011-02-07T05:56:00.000-08:00</published><updated>2011-02-07T05:56:48.084-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Debug certificate expired on"/><title type='text'>[Android 강좌][Korean][테마][Error] - &quot;generating final archive: Debug certificate expired on ....&quot;</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;1. &quot;Error&quot; Cause&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
: &quot;Eclpise&quot;에서 빌드 중에 이런 오류 메시지가 나오는 경우가 있습니다.&lt;br /&gt;
이는 &quot;Debug certificate&quot;가 만료되었기 때문에 발생하는 것이다.&lt;br /&gt;
(참고 : &quot;Debug certificate&quot;는 만들어진 후 365일이 지나면 만료됩니다.)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;2. &quot;Error&quot; solution&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
만료된 Debug certificate를 새로 갱신해주면 된다.&lt;br /&gt;
debug.keystore 파일을 삭제한 후, 다시 안드로이드 애플리케이션을 빌드만 하면 된다.&lt;br /&gt;
(참고 : &quot;debug.keystore&quot; 파일의 위치는 &#39;Window &amp;gt; Preferences &amp;gt; Android &amp;gt; Build&#39;에서 &#39;Default debug keystore&#39; 항목을 참조하면 된다.)&lt;br /&gt;
&lt;br /&gt;
추가로 문의 사항이나, 궁금한 점이 계시면 연락주세요.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)&lt;br /&gt;
※ 도움이 되셨다면, ^^. 맨 위 광고클릭 좀..ㅎㅎ</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/702078970196778191/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-koreanerror-generating-final.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/702078970196778191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/702078970196778191'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-koreanerror-generating-final.html' title='[Android 강좌][Korean][테마][Error] - &quot;generating final archive: Debug certificate expired on ....&quot;'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-3511334669684222523</id><published>2011-02-07T05:48:00.001-08:00</published><updated>2011-02-07T05:48:30.704-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Market 링크방법"/><category scheme="http://www.blogger.com/atom/ns#" term="details"/><category scheme="http://www.blogger.com/atom/ns#" term="market"/><category scheme="http://www.blogger.com/atom/ns#" term="packageName"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><title type='text'>[Android Course][English][Theme] - Link to Android Market</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: large;&quot;&gt;1. &lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;73&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Market&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;74&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Link type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
- packageName = 패키지네임&lt;br /&gt;
- searchName = 검색어&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;2. example&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;: &quot;market://details?id=packageName&quot;&lt;/strong&gt;&lt;br /&gt;
=&amp;gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;78&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Details&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;79&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;of&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;80&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;81&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;82&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;with the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;83&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;application&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;84&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;goes to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;85&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the screen&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;86&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;: &quot;market://search?q=packageName&quot; or &quot;market://search?q=searchName&quot;&lt;/strong&gt;&lt;br /&gt;
=&amp;gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;88&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Package&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;89&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, or&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;90&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;91&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;people&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;92&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;that&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;93&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;94&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;search&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;95&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;should&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;96&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;search&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;97&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in the market&lt;/span&gt;&lt;span closure_uid_jbf4pq=&quot;98&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: large;&quot;&gt;3. &lt;span class=&quot;hps&quot; closure_uid_jbf4pq=&quot;76&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;How to Run&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;1) &quot;Html&quot; Link&lt;/strong&gt;&lt;br /&gt;
&quot;href=market://details/?id=packageName&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2) &quot;Intent&quot; Link&lt;/strong&gt;&lt;br /&gt;
Intent marketLaunch = new Intent(Intent.ACTION_VIEW); &lt;br /&gt;
marketLaunch.setData(Uri.parse(&quot;market://search?q=Screen&quot;)); &lt;br /&gt;
startActivity(marketLaunch);&lt;br /&gt;
&lt;br /&gt;
In addition, inquiries, or questions, please contact us.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)&lt;br /&gt;
&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/3511334669684222523/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishtheme-link-to.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/3511334669684222523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/3511334669684222523'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-courseenglishtheme-link-to.html' title='[Android Course][English][Theme] - Link to Android Market'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-4898931078148379585</id><published>2011-02-07T05:46:00.000-08:00</published><updated>2011-02-07T05:46:10.163-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android Market 링크방법"/><category scheme="http://www.blogger.com/atom/ns#" term="details"/><category scheme="http://www.blogger.com/atom/ns#" term="market"/><category scheme="http://www.blogger.com/atom/ns#" term="packageName"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><title type='text'>[Android 강좌][Korean][테마] - Android Market 링크방법</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;1. 마켓링크 종류&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
- packageName = 패키지네임&lt;br /&gt;
- searchName = 검색어&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;2. example&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;: &quot;market://details?id=packageName&quot;&lt;/strong&gt;&lt;br /&gt;
=&amp;gt; 해당 패키지명을 가진 어플의 상세화면으로 간다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;: &quot;market://search?q=packageName&quot; or &quot;market://search?q=searchName&quot;&lt;/strong&gt;&lt;br /&gt;
=&amp;gt; 해당패키지명 또는 해당 검색명으로 마켓에서 검색을 한다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;3. 실행 방법&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;1) Html 링크&lt;/strong&gt;&lt;br /&gt;
&quot;href=market://details/?id=packageName&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2) Intent 링크&lt;/strong&gt;&lt;br /&gt;
Intent marketLaunch = new Intent(Intent.ACTION_VIEW); &lt;br /&gt;
marketLaunch.setData(Uri.parse(&quot;market://search?q=Screen&quot;)); &lt;br /&gt;
startActivity(marketLaunch);&lt;br /&gt;
&lt;br /&gt;
추가로 문의 사항이나, 궁금한 점이 계시면 연락주세요.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)&lt;br /&gt;
※ 도움이 되셨다면, ^^. 맨 위 광고클릭 좀..ㅎㅎ &lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/4898931078148379585/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-korean-android-market.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4898931078148379585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/4898931078148379585'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/02/android-korean-android-market.html' title='[Android 강좌][Korean][테마] - Android Market 링크방법'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2286884684117686990.post-8141198271385334134</id><published>2011-01-28T18:19:00.000-08:00</published><updated>2011-01-28T18:19:08.365-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tab"/><category scheme="http://www.blogger.com/atom/ns#" term="TabActivity"/><category scheme="http://www.blogger.com/atom/ns#" term="TabHost"/><category scheme="http://www.blogger.com/atom/ns#" term="TabSpec"/><title type='text'>[Android Course][English][Theme] - Android Tab to apply a background image</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!--
google_ad_client = &quot;pub-1053680676506708&quot;;
/* 300x250, 작성됨 10. 12. 14 */
google_ad_slot = &quot;4563591692&quot;;
google_ad_width = 300;
google_ad_height = 250;
//--&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://pagead2.googlesyndication.com/pagead/show_ads.js&quot; type=&quot;text/javascript&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot; &quot; id=&quot;tts_button&quot;&gt;&lt;object classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0&quot; height=&quot;18&quot; id=&quot;tts_flash&quot; width=&quot;18&quot;&gt;&lt;param NAME=&quot;_cx&quot; VALUE=&quot;476&quot;&gt;&lt;param NAME=&quot;_cy&quot; VALUE=&quot;476&quot;&gt;&lt;param NAME=&quot;FlashVars&quot; VALUE=&quot;&quot;&gt;&lt;param NAME=&quot;Movie&quot; VALUE=&quot;http://www.gstatic.com/translate/sound_player2.swf&quot;&gt;&lt;param NAME=&quot;Src&quot; VALUE=&quot;http://www.gstatic.com/translate/sound_player2.swf&quot;&gt;&lt;param NAME=&quot;WMode&quot; VALUE=&quot;Transparent&quot;&gt;&lt;param NAME=&quot;Play&quot; VALUE=&quot;0&quot;&gt;&lt;param NAME=&quot;Loop&quot; VALUE=&quot;-1&quot;&gt;&lt;param NAME=&quot;Quality&quot; VALUE=&quot;High&quot;&gt;&lt;param NAME=&quot;SAlign&quot; VALUE=&quot;&quot;&gt;&lt;param NAME=&quot;Menu&quot; VALUE=&quot;-1&quot;&gt;&lt;param NAME=&quot;Base&quot; VALUE=&quot;&quot;&gt;&lt;param NAME=&quot;AllowScriptAccess&quot; VALUE=&quot;always&quot;&gt;&lt;param NAME=&quot;Scale&quot; VALUE=&quot;ShowAll&quot;&gt;&lt;param NAME=&quot;DeviceFont&quot; VALUE=&quot;0&quot;&gt;&lt;param NAME=&quot;EmbedMovie&quot; VALUE=&quot;0&quot;&gt;&lt;param NAME=&quot;BGColor&quot; VALUE=&quot;&quot;&gt;&lt;param NAME=&quot;SWRemote&quot; VALUE=&quot;&quot;&gt;&lt;param NAME=&quot;MovieData&quot; VALUE=&quot;&quot;&gt;&lt;param NAME=&quot;SeamlessTabbing&quot; VALUE=&quot;1&quot;&gt;&lt;param NAME=&quot;Profile&quot; VALUE=&quot;0&quot;&gt;&lt;param NAME=&quot;ProfileAddress&quot; VALUE=&quot;&quot;&gt;&lt;param NAME=&quot;ProfilePort&quot; VALUE=&quot;0&quot;&gt;&lt;param NAME=&quot;AllowNetworking&quot; VALUE=&quot;all&quot;&gt;&lt;param NAME=&quot;AllowFullScreen&quot; VALUE=&quot;false&quot;&gt;&lt;/OBJECT&gt;&lt;/div&gt;&lt;span id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;640&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Tab&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;641&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;typically&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;642&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;apply&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;643&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a background image&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;644&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is simple&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;645&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;646&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;In other words&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;647&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;648&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;as follows:&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;649&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&quot;setBackgroundColor ()&quot;&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;650&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Applying&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;651&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;is easy&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;652&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&#39;m_tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor(&quot;#534512&quot;));&#39;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;654&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;However&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;655&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;, I want&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;656&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;several&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;657&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;properties&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;658&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;as shown below&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;659&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;was applied.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;704&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &#39;Touch&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;705&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the color&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;706&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;707&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;image&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;708&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;when you&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;709&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&#39;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;710&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &#39;Touch Up&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;711&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;When the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;712&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;713&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;714&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;image&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;715&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&#39;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;716&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;- &#39;Tab&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;717&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;color&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;718&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;or&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;719&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;image&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;720&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;when it is&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;721&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;focusing&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;722&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;on&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;723&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;&#39;&lt;/span&gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;725&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;As&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;726&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;shown above&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;727&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;in order to&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;728&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;provide&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;729&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;730&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;base&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;731&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;should be&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;732&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;combined&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;733&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;734&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;735&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;Android Control&lt;/span&gt;&lt;span closure_uid_m7rk4j=&quot;736&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih2zSiPkthoUvB1UWr-KFHEpcOLDz_duxnvvyaCDx95bNRmJXbPJUYSsTIYb7OgoifaPw11faBB_G1DbnfXb4nNoW-uzaEgbBKXA_oldM4jgWSUnbQGX221jWdldsTF5ebw5sKZ1ZjPHI/s1600/3.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; s5=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih2zSiPkthoUvB1UWr-KFHEpcOLDz_duxnvvyaCDx95bNRmJXbPJUYSsTIYb7OgoifaPw11faBB_G1DbnfXb4nNoW-uzaEgbBKXA_oldM4jgWSUnbQGX221jWdldsTF5ebw5sKZ1ZjPHI/s400/3.JPG&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBXBCZywptJV0-GeS4MVK1Ig8ZSx1nTk10ZwA8w8R1ZLkGlKOhBo0ruvM7zdLxWzBcS3Bpi9YU8An9JseyCMpBQbKS2suavDamUwz8NItqQVRsdFDICgKTjFWb0xQBIqKiQdAqZXyicQk/s1600/4.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; s5=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBXBCZywptJV0-GeS4MVK1Ig8ZSx1nTk10ZwA8w8R1ZLkGlKOhBo0ruvM7zdLxWzBcS3Bpi9YU8An9JseyCMpBQbKS2suavDamUwz8NItqQVRsdFDICgKTjFWb0xQBIqKiQdAqZXyicQk/s400/4.JPG&quot; width=&quot;267&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXF7mHwfwtxj7mTX1xSO6zNlmY988WOLGkqZlylRwT_Cr8u1l_j5tCud90gqhyUpveBzOnOT7zBGxAX92BGW1Z9NzAVTDU52p6udTWGsVfJFw5GgPa9pfk0dKjsM8FFDhOvIauTUgEM3c/s1600/5.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; s5=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXF7mHwfwtxj7mTX1xSO6zNlmY988WOLGkqZlylRwT_Cr8u1l_j5tCud90gqhyUpveBzOnOT7zBGxAX92BGW1Z9NzAVTDU52p6udTWGsVfJFw5GgPa9pfk0dKjsM8FFDhOvIauTUgEM3c/s400/5.JPG&quot; width=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue; font-size: large;&quot;&gt;&lt;strong&gt;※&amp;nbsp;Example Code&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;- TapView_Custom.java&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
public class TapView_Custom extends TabActivity implements OnTabChangeListener {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Called when the activity is first created. */&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private TabHost m_tabHost = null;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.onCreate(savedInstanceState);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setContentView(R.layout.tapview_custom_layout);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** TabHost ID */ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_tabHost= (TabHost)findViewById(android.R.id.tabhost);&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TabSpec aaa_TabSpec = m_tabHost.newTabSpec(&quot;aaa&quot;);&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TabSpec bbb_TabSpec = m_tabHost.newTabSpec(&quot;bbb&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TabSpec ccc_TabSpec = m_tabHost.newTabSpec(&quot;ccc&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LayoutInflater vi1 = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LayoutInflater vi2 = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LayoutInflater vi3 = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;View View_1 = (View)vi1.inflate(&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;R.layout.tab_row_item&lt;/strong&gt;&lt;/span&gt;, null);&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; View View_2 = (View)vi2.inflate(R.layout.tab_row_item, null);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; View View_3 = (View)vi3.inflate(R.layout.tab_row_item, null);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinearLayout Layout_1 = (LinearLayout)View_1.findViewById(R.id.LinearLayout01);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinearLayout Layout_2 = (LinearLayout)View_2.findViewById(R.id.LinearLayout01);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinearLayout Layout_3 = (LinearLayout)View_3.findViewById(R.id.LinearLayout01);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;Layout_1.setBackgroundResource(&lt;span style=&quot;color: blue;&quot;&gt;&lt;strong&gt;R.drawable.tab_1_bg&lt;/strong&gt;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Layout_2.setBackgroundResource(R.drawable.tab_2_bg);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Layout_3.setBackgroundResource(R.drawable.tab_3_bg);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageView iv_1 = (ImageView)View_1.findViewById(R.id.icon);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageView iv_2 = (ImageView)View_2.findViewById(R.id.icon);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageView iv_3 = (ImageView)View_3.findViewById(R.id.icon);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextView tv_1 = (TextView)View_1.findViewById(R.id.text);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextView tv_2 = (TextView)View_2.findViewById(R.id.text);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextView tv_3 = (TextView)View_3.findViewById(R.id.text);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tv_1.setText(&quot;aaa&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tv_2.setText(&quot;bbb&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tv_3.setText(&quot;ccc&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aaa_TabSpec.&lt;span style=&quot;color: red;&quot;&gt;setIndicator(View_1);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aaa_TabSpec.setContent(new Intent(this,test_activity.class));&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bbb_TabSpec.setIndicator(View_2);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bbb_TabSpec.setContent(new Intent(this,test_activity.class));&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc_TabSpec.setIndicator(View_3);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ccc_TabSpec.setContent(new Intent(this,test_activity.class));&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/** 탭을 TabHost 에 추가한다 */ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;m_tabHost.addTab(aaa_TabSpec);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_tabHost.addTab(bbb_TabSpec);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_tabHost.addTab(ccc_TabSpec);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_tabHost.getTabWidget().setCurrentTab(0);&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;- tapview_custom_layout.xml&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&amp;nbsp; &lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res/android&quot;&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; android:orientation=&quot;vertical&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;TabHost &lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_width=&quot;fill_parent&quot; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_height=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:id=&quot;@android:id/tabhost&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;LinearLayout&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;android:id=&quot;@+id/LinearLayout01&quot; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;android:orientation=&quot;vertical&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_height=&quot;fill_parent&quot; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_width=&quot;fill_parent&quot;&amp;gt;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;FrameLayout&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:id=&quot;@android:id/tabcontent&quot; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_height=&quot;fill_parent&quot; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_weight=&quot;1&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/FrameLayout&amp;gt;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;TabWidget&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:id=&quot;@android:id/tabs&quot; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_width=&quot;fill_parent&quot; &amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/TabWidget&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/LinearLayout&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;lt;/TabHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;- tab_row_item.xml&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout&lt;br /&gt;
&amp;nbsp;xmlns:android=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res/android&quot;&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;&quot;&lt;br /&gt;
&amp;nbsp;android:layout_width=&quot;fill_parent&quot;&lt;br /&gt;
&amp;nbsp;android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;
&amp;nbsp;android:id=&quot;@+id/LinearLayout01&quot; &lt;br /&gt;
&amp;nbsp;android:orientation=&quot;vertical&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;ImageView&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:id=&quot;@+id/icon&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_width=&quot;33dip&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_height=&quot;30dip&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_marginTop=&quot;3dip&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:scaleType=&quot;fitXY&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_gravity=&quot;center&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:background=&quot;@drawable/icon&quot; &amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/ImageView&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;TextView&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:id=&quot;@+id/text&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_height=&quot;wrap_content&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_width=&quot;wrap_content&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_marginLeft=&quot;5dip&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_marginRight=&quot;5dp&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:textSize=&quot;15dip&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:layout_gravity=&quot;center&quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;- tab_1_bg.xml&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
(&#39;res - drawable&#39; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;623&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;folder,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;624&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;create a file in&lt;/span&gt;)&lt;br /&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;selector xmlns:android=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res/android&quot;&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_selected=&quot;true&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_green&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_pressed=&quot;true&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_yellow&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_focused=&quot;false&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_white&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/selector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;- tab_2_bg.xml&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
(&#39;res - drawable&#39; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;623&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;folder,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;624&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;create a file in&lt;/span&gt;)&lt;br /&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;selector xmlns:android=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res/android&quot;&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_selected=&quot;true&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_green&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_pressed=&quot;true&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_yellow&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_focused=&quot;false&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_white&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/selector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;- tab_3_bg.xml&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
(&#39;res - drawable&#39; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;623&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;folder,&lt;/span&gt; &lt;span class=&quot;hps&quot; closure_uid_m7rk4j=&quot;624&quot; title=&quot;대체 번역을 클릭합니다.&quot;&gt;create a file in&lt;/span&gt;)&lt;br /&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;br /&gt;
&amp;lt;selector xmlns:android=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res/android&quot;&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_selected=&quot;true&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_green&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_pressed=&quot;true&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_yellow&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;lt;item&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:state_focused=&quot;false&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android:drawable=&quot;@drawable/color_white&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/selector&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In addition, inquiries, or questions, please contact us.&lt;br /&gt;
(&lt;a href=&quot;mailto:joonryang@gmail.com&quot;&gt;joonryang@gmail.com&lt;/a&gt;)</content><link rel='replies' type='application/atom+xml' href='http://joonryang.blogspot.com/feeds/8141198271385334134/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://joonryang.blogspot.com/2011/01/android-courseenglishtheme-android-tab_28.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8141198271385334134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2286884684117686990/posts/default/8141198271385334134'/><link rel='alternate' type='text/html' href='http://joonryang.blogspot.com/2011/01/android-courseenglishtheme-android-tab_28.html' title='[Android Course][English][Theme] - Android Tab to apply a background image'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih2zSiPkthoUvB1UWr-KFHEpcOLDz_duxnvvyaCDx95bNRmJXbPJUYSsTIYb7OgoifaPw11faBB_G1DbnfXb4nNoW-uzaEgbBKXA_oldM4jgWSUnbQGX221jWdldsTF5ebw5sKZ1ZjPHI/s72-c/3.JPG" height="72" width="72"/><thr:total>0</thr:total></entry></feed>