{"id":782,"date":"2021-02-02T20:55:45","date_gmt":"2021-02-02T11:55:45","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=782"},"modified":"2025-09-12T18:18:02","modified_gmt":"2025-09-12T09:18:02","slug":"android-service-onunbind-%eb%a6%ac%ed%84%b4%ea%b0%92%ec%97%90-%eb%8c%80%ed%95%b4","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2021\/02\/02\/782\/","title":{"rendered":"Android: Service onUnbind() \ub9ac\ud134\uac12\uc5d0 \ub300\ud574"},"content":{"rendered":"\n<p>onUnbind() \ub294 boolean\uc744 \ub9ac\ud134\ud558\uac8c \ub418\uc5b4\uc788\ub294\ub370, false\ub97c \ub9ac\ud134\ud558\uba74 \ub2e4\uc2dc bind\ub420 \ub54c \uc544\ubb34\uac83\ub3c4 \ubd88\ub9ac\uc9c0 \uc54a\ub294\ub2e4. \uc774\ub807\uac8c \ub3d9\uc791\ud558\ub294 \uc774\uc720\ub294 onBind()\uc5d0\uc11c IBinder\ub97c \ud55c\ubc88 \ub9ac\ud134\ubc1b\uc73c\uba74, \uc2dc\uc2a4\ud15c\uc774 \uc774 \uac12\uc744 \uacc4\uc18d \uc7ac\ud65c\uc6a9\ud558\uae30 \ub54c\ubb38\uc774\uace0 \ub2e4\uc2dc bind\ub97c \ud574\ub3c4 \uc804\ud600 \ubb38\uc81c\uc5c6\uc774 \ub3d9\uc791\ud558\uac8c\ub41c\ub2e4. <\/p>\n\n\n\n<p>\uc774\uacbd\uc6b0 \ubb38\uc81c\uac00 \uc788\uc744 \uc218 \uc788\ub294\ub370, \uc608\ub97c\ub4e4\uc5b4 onUnbind() \uc5d0\uc11c \uc0c1\ud0dc\ub97c \uac80\uc0ac\ud558\uace0 stopSelf()\ub85c \uc11c\ube44\uc2a4 \uc885\ub8cc\ub97c \ud558\ub3c4\ub85d \ud574\ub3c4, onBind()-onUnbind()\uac00 \ub450\ubc88\uc9f8 binding\ubd80\ud130\ub294 \uc804\ud600 \ubd88\ub9ac\uc9c0\uac00 \uc54a\uc544 \uc6d0\ud558\ub294 \ub3d9\uc791\uc744 \ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<p>onUnbind()\uc5d0\uc11c true\ub97c \ub9ac\ud134\ud558\uac8c\ub418\uba74, \ub2e4\uc2dc bind\ub420 \ub54c, onRebind()\uac00 \ubd88\ub9ac\uba70 unbind\uc2dc\uc5d0\ub294 onUnbind()\uac00 \ubd88\ub9ac\uac8c\ub41c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c, onUnbind()\uc5d0\uc11c stopSelf()\ub85c \uc11c\ube44\uc2a4\ub97c \uc885\ub8cc\uc2dc\ud0a4\ub824\ub294 \uacbd\uc6b0\uc5d0\ub294 true\ub97c \ub9ac\ud134\ud574\uc918\uc57c \ud55c\ub2e4. <\/p>\n\n\n\n<p>\ub2e4\uc74c \ucf54\ub4dc\ub294 \uc11c\ube44\uc2a4\uc758 bind, unbind\ub9cc \ud655\uc778\ud574\ubcf4\uae30 \uc704\ud55c \ucf54\ub4dc\uc774\ub2e4. <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class TimerService: LifecycleService() {\n\n    private val binder = TimerBinder()\n    private var timerState = TimerState.STOP\n\n    override fun onCreate() {\n        super.onCreate()\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        super.onStartCommand(intent, flags, startId)\n\n        return START_NOT_STICKY\n    }\n\n    override fun onBind(intent: Intent): IBinder? {\n        super.onBind(intent)\n        Timber.i(\"TimerService) onBind\")\n        return binder\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        super.onUnbind(intent)\n        Timber.i(\"TimerService) onUnbind\")\n\n        if(timerState == TimerState.STOP) stopSelf()\n        \/\/ If return true, next binding calls 'onRebind()'.\n        \/\/ here, return false, next binding calls nothing. onUnbind() not called too.\n        \/\/ onBind() called at the first time once to get IBinder.\n        return true\n    }\n\n    override fun onRebind(intent: Intent?) {\n        Timber.i(\"TimerService) onRebind\")\n        super.onRebind(intent)\n    }\n\n    override fun onDestroy() {\n        Timber.i(\"TimerService) onDestroy\")\n        super.onDestroy()\n    }\n\n    \/\/ public method of service\n    fun start(){\n        Timber.i(\"TimerService) start()\")\n        timerState = TimerState.RUN\n    }\n\n    fun pause(){\n        Timber.i(\"TimerService) Pause()\")\n        timerState = TimerState.PAUSE\n    }\n\n    fun stop(){\n        Timber.i(\"TimerService) stop()\")\n        timerState = TimerState.STOP\n    }\n\n    inner class TimerBinder: Binder() {\n        fun getService(): TimerService = this@TimerService\n    }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TimerService<\/span><span style=\"color: #ADBAC7\">: <\/span><span style=\"color: #F69D50\">LifecycleService<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">val<\/span><span style=\"color: #ADBAC7\"> binder <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">TimerBinder<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">private<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">var<\/span><span style=\"color: #ADBAC7\"> timerState <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> TimerState.STOP<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onCreate<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onCreate<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onStartCommand<\/span><span style=\"color: #ADBAC7\">(intent: <\/span><span style=\"color: #F69D50\">Intent<\/span><span style=\"color: #ADBAC7\">?, flags: <\/span><span style=\"color: #F69D50\">Int<\/span><span style=\"color: #ADBAC7\">, startId: <\/span><span style=\"color: #F69D50\">Int<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">Int<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onStartCommand<\/span><span style=\"color: #ADBAC7\">(intent, flags, startId)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> START_NOT_STICKY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onBind<\/span><span style=\"color: #ADBAC7\">(intent: <\/span><span style=\"color: #F69D50\">Intent<\/span><span style=\"color: #ADBAC7\">): <\/span><span style=\"color: #F69D50\">IBinder<\/span><span style=\"color: #ADBAC7\">? {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onBind<\/span><span style=\"color: #ADBAC7\">(intent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;TimerService) onBind&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> binder<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onUnbind<\/span><span style=\"color: #ADBAC7\">(intent: <\/span><span style=\"color: #F69D50\">Intent<\/span><span style=\"color: #ADBAC7\">?): <\/span><span style=\"color: #F69D50\">Boolean<\/span><span style=\"color: #ADBAC7\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onUnbind<\/span><span style=\"color: #ADBAC7\">(intent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;TimerService) onUnbind&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\">(timerState <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> TimerState.STOP) <\/span><span style=\"color: #DCBDFB\">stopSelf<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #768390\">\/\/ If return true, next binding calls &#39;onRebind()&#39;.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #768390\">\/\/ here, return false, next binding calls nothing. onUnbind() not called too.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #768390\">\/\/ onBind() called at the first time once to get IBinder.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onRebind<\/span><span style=\"color: #ADBAC7\">(intent: <\/span><span style=\"color: #F69D50\">Intent<\/span><span style=\"color: #ADBAC7\">?) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;TimerService) onRebind&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onRebind<\/span><span style=\"color: #ADBAC7\">(intent)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">override<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">onDestroy<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;TimerService) onDestroy&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">super<\/span><span style=\"color: #ADBAC7\">.<\/span><span style=\"color: #DCBDFB\">onDestroy<\/span><span style=\"color: #ADBAC7\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #768390\">\/\/ public method of service<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">start<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;TimerService) start()&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        timerState <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> TimerState.RUN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">pause<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;TimerService) Pause()&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        timerState <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> TimerState.PAUSE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">stop<\/span><span style=\"color: #ADBAC7\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        Timber.<\/span><span style=\"color: #DCBDFB\">i<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;TimerService) stop()&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        timerState <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> TimerState.STOP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">inner<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">TimerBinder<\/span><span style=\"color: #ADBAC7\">: <\/span><span style=\"color: #F69D50\">Binder<\/span><span style=\"color: #ADBAC7\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">fun<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">getService<\/span><span style=\"color: #ADBAC7\">(): <\/span><span style=\"color: #F69D50\">TimerService<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">this@TimerService<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">}<\/span><\/span><\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>onUnbind() \ub294 boolean\uc744 \ub9ac\ud134\ud558\uac8c \ub418\uc5b4\uc788\ub294\ub370, false\ub97c \ub9ac\ud134\ud558\uba74 \ub2e4\uc2dc bind\ub420 \ub54c \uc544\ubb34\uac83\ub3c4 \ubd88\ub9ac\uc9c0 \uc54a\ub294\ub2e4. \uc774\ub807\uac8c \ub3d9\uc791\ud558\ub294 \uc774\uc720\ub294 onBind()\uc5d0\uc11c IBinder\ub97c \ud55c\ubc88 \ub9ac\ud134\ubc1b\uc73c\uba74, \uc2dc\uc2a4\ud15c\uc774 \uc774 \uac12\uc744 \uacc4\uc18d \uc7ac\ud65c\uc6a9\ud558\uae30 \ub54c\ubb38\uc774\uace0 \ub2e4\uc2dc bind\ub97c \ud574\ub3c4 \uc804\ud600 \ubb38\uc81c\uc5c6\uc774 \ub3d9\uc791\ud558\uac8c\ub41c\ub2e4. \uc774\uacbd\uc6b0 \ubb38\uc81c\uac00 \uc788\uc744 \uc218 \uc788\ub294\ub370, \uc608\ub97c\ub4e4\uc5b4 onUnbind() \uc5d0\uc11c \uc0c1\ud0dc\ub97c \uac80\uc0ac\ud558\uace0 stopSelf()\ub85c \uc11c\ube44\uc2a4 \uc885\ub8cc\ub97c \ud558\ub3c4\ub85d \ud574\ub3c4, onBind()-onUnbind()\uac00 \ub450\ubc88\uc9f8 binding\ubd80\ud130\ub294 <a href=\"http:\/\/batmask.net\/index.php\/2021\/02\/02\/782\/\" class=\"btn btn-link continue-link\">\ub354 \uc77d\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,34],"tags":[186,203,202,201,204],"class_list":["post-782","post","type-post","status-publish","format-standard","hentry","category-android","category-kotlin","tag-android-2","tag-onrebind","tag-onunbind","tag-service","tag-stopself"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/782","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=782"}],"version-history":[{"count":4,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/782\/revisions"}],"predecessor-version":[{"id":3532,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/782\/revisions\/3532"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=782"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}