안드로이드 백그라운드 서비스 예제 - IntentServiceAndroid/개념 및 예제2015. 2. 21. 21:51
Table of Contents
반응형
작동은 아래 포스팅 처럼 동작합니다. 좀 부족함 점이 많지만 공개합니다.
[Android/프로그래밍] - IntentService 구현 중 2..( 안드로이드 백그라운드 서비스)
http://webnautes.tistory.com/664
MainActivity.java
- package com.webnautes.backgroundserviceexample;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Handler;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity implements BackgroundResultReceiver.Receiver {
- int count=0;
- public BackgroundResultReceiver mReceiver;
- private TextView text1;
- boolean isFinish = false;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- text1 = (TextView) findViewById(R.id.text1);
- String str = Integer.toString(count);
- text1.setText(str );
- }
- @Override
- protected void onRestart() {
- super.onRestart();
- Toast.makeText(getApplicationContext(),
- "onRestart", Toast.LENGTH_LONG).show();
- final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, BackgroundService.class);
- stopService(intent);
- }
- @Override
- public void onReceiveResult(int resultCode, Bundle resultData) {
- switch (resultCode) {
- case BackgroundService.STATUS_RUNNING:
- Toast.makeText(this, "STATUS_RUNNING", Toast.LENGTH_LONG).show();
- break;
- case BackgroundService.STATUS_FINISHED:
- count = resultData.getInt("back");
- String str = Integer.toString(count);
- text1.setText(str);
- Toast.makeText(this, "STATUS_FINISHED", Toast.LENGTH_LONG).show();
- break;
- case BackgroundService.STATUS_ERROR:
- Toast.makeText(this, "STATUS_ERROR", Toast.LENGTH_LONG).show();
- break;
- }
- }
- @Override
- protected void onStop() {
- super.onStop();
- Toast.makeText(getApplicationContext(),
- "onStop", Toast.LENGTH_LONG).show();
- mReceiver = new BackgroundResultReceiver(new Handler());
- mReceiver.setReceiver(this);
- final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, BackgroundService.class);
- intent.putExtra("count", count);
- intent.putExtra("receiver", mReceiver);
- intent.putExtra("command", "increase count");
- startService(intent);
- }
- }
BackgroundResultReceiver.java
- package com.webnautes.backgroundserviceexample;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.ResultReceiver;
- public class BackgroundResultReceiver extends ResultReceiver {
- private Receiver mReceiver;
- public BackgroundResultReceiver(Handler handler) {
- super(handler);
- }
- public void setReceiver(Receiver receiver) {
- mReceiver = receiver;
- }
- public interface Receiver {
- public void onReceiveResult(int resultCode, Bundle resultData);
- }
- @Override
- protected void onReceiveResult(int resultCode, Bundle resultData) {
- if (mReceiver != null) {
- mReceiver.onReceiveResult(resultCode, resultData);
- }
- }
- }
BackgroundService.java
- package com.webnautes.backgroundserviceexample;
- import android.app.IntentService;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.ResultReceiver;
- public class BackgroundService extends IntentService {
- public static final int STATUS_RUNNING = 0;
- public static final int STATUS_FINISHED = 1;
- public static final int STATUS_ERROR = 2;
- ResultReceiver receiver = null;
- int count;
- boolean isRunning = true;
- public BackgroundService() {
- super("BackgroundService");
- }
- @Override
- protected void onHandleIntent(Intent workIntent) {
- count = workIntent.getExtras().getInt("count");
- receiver = workIntent.getParcelableExtra("receiver");
- String command = workIntent.getStringExtra("command");
- if (command.equals("increase count")) {
- receiver.send(STATUS_RUNNING, Bundle.EMPTY);
- }
- //1초에 한번씩 카운터 값을 증가시킨다..
- while(isRunning) {
- count = count + 1;
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- @Override
- public void onDestroy ()
- {
- //카운트 값 증가시키는 루프를 중단시키고
- isRunning = false;
- //증가된 카운트 값을 리턴한다.
- Bundle b = new Bundle();
- try {
- b.putInt( "back", count);
- receiver.send(STATUS_FINISHED, b);
- } catch(Exception e) {
- b.putString(Intent.EXTRA_TEXT, e.toString());
- receiver.send(STATUS_ERROR, b);
- }
- }
- }
AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.webnautes.backgroundserviceexample" >
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <service
- android:name=".BackgroundService"
- android:exported="false"/>
- </application>
- </manifest>
반응형
'Android > 개념 및 예제' 카테고리의 다른 글
안드로이드 센서를 로봇 제어에 사용하기 (가속도 센서, 자기장 센서 ) (4) | 2015.11.23 |
---|---|
안드로이드 에코 클라이언트 앱 (2) | 2015.11.14 |
Android WebView 예제 (0) | 2014.07.09 |
android.os.NetworkOnMainThreadException (0) | 2014.06.29 |
안드로이드의 View에 이미지 혹은 단색 배경 지정하기 (0) | 2014.05.27 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!