serviceTest Settings Hello world! 서비스 시작 서비스 종료 console
2013년 7월 14일 일요일
Android의 서비스를 이해해보자 (5)string.xml
5. string.xml
------------------------------------------------------------------------------------------------------------------------
Android의 서비스를 이해해보자 (4)AndroidManifest.xml
4. AndroidManifest.xml
-------------------------------------------------------------------------------------------------------------------------
Android의 서비스를 이해해보자 (3)activity_main.xml
3.activity_main.xml
-------------------------------------------------------------------------------------------------------------------------
Android의 서비스를 이해해보자 (2)Service class
2.Service
-------------------------------------------------------------------------------------------------------------------------
package bit.java39.servicetest; import android.app.Service; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.widget.Toast; public class NewsService extends Service { boolean mQuit; // Service life cycle // startService called => onCreate called => onStartCommand / onBind => // onDestory @Override public void onCreate() { super.onCreate(); } // -intent : 클라이언트가 서비스를 시작할 때 전달한 인텐트 // -flags : 서비스의 요청에 대한 추가 정보 // -startID : 서비스 요청에 대한 고유 식별번호. 차후 stopSelfResult 메서드로 서비스가 // 스스로 종료할 때 식별자로 이용한다. // -return value : 서비스의 동작모드를 지정하는데 주로 접착식과 비접착식 둘 중 하나를 리턴한다. // 접착식은 시작과 종료가 명시적이고 비접착식은 명령을 처리하는 동안만 실행된다는 점이 다르며 프로세스가 // 강제종료 될 때 재시작 여부가 다르다. // -서비스는 프로세스의 메인스레드에서 실행되므로 너무 오래 시간을 끌거나 블로킹해서는 안된다. // 즉시 리턴해야 하므로 오래 걸리는 작업이나 지속적으로 해야 할 작업은 반드시 스레드로 분리해야한다. // 데몬(Unix 용어:일반적으로 생각하는 백그라운드 서비스)의 경우는 지속적으로 실행되어야 하므로 // 스레드를 생성하여 실행시키는 것이 보통이다. @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); mQuit = false; NewsThread thread = new NewsThread(this, mHandler); thread.start(); // START_STICKY : START_STICKY 형태로 호출된 Service 는 // null Intent 가 담긴 onStartCommand() 콜백 함수가 호출된다. return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service End", Toast.LENGTH_SHORT).show(); mQuit = true; } @Override public IBinder onBind(Intent intent) { return null; } class NewsThread extends Thread { NewsService mParent; Handler mHandler; String[] arrNews = { "신창근", "이현진", "최준석", "임정현", "박용성", "김홍준" }; public NewsThread(NewsService parent, Handler handler) { mParent = parent; mHandler = handler; } public void run() { for (int i = 0; mQuit == false; i++) { Message msg = new Message(); msg.what = 0; msg.obj = arrNews[i % arrNews.length]; mHandler.sendMessage(msg); try { Thread.sleep(5000); } catch (Exception e) {} } } } Handler mHandler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0) { String news = (String) msg.obj; Toast.makeText(NewsService.this, news, Toast.LENGTH_SHORT).show(); } } }; }
Android의 서비스를 이해해보자 (1)MainActivity
안드로이드의 구성 요소 4가지 ( Activity, BR, CP, Service ) 중
오늘은 서비스에 대해 알아봅시다.
Service는 백그라운드에서 실행되며 사용자와 직접적인 상호작용은 하지않는다.
클라이언트에서 어떤식으로 호출하는가에 따라 두 가지로 나뉜다.
1. 백그라운드 데몬 : 일반적으로 흔히 알고있는 백그라운드 서비스 ex)뮤직플레이어
2. 원격호출인터페이스 : 클라이언트를 위해 특정한 기능을 제공하는 역할. 자신의 기능을 메서드로 노출시켜두고 클라이언트는 이 메서드를 호출함으로써 서비스를 이용한다.
ex)다른 패키지에 있는 Activity에서 해당 서비스의 메서드를 호출해 이용할 수 있다
-----------------------------------------------------------------
이 중 이번 글에서 다뤄 볼 예제는 데몬 서비스이다.
우선 작성해야 할 것은
1. Activity를 상속받은 클래스
2. Service를 상속받은 클래스
3. 레이아웃 activity_main.xml
4. AndroidManifest.xml
5. string.xml
을 작업 할 것이다.
-----------------------------------------------------------------
1. Activity
오늘은 서비스에 대해 알아봅시다.
Service는 백그라운드에서 실행되며 사용자와 직접적인 상호작용은 하지않는다.
클라이언트에서 어떤식으로 호출하는가에 따라 두 가지로 나뉜다.
1. 백그라운드 데몬 : 일반적으로 흔히 알고있는 백그라운드 서비스 ex)뮤직플레이어
2. 원격호출인터페이스 : 클라이언트를 위해 특정한 기능을 제공하는 역할. 자신의 기능을 메서드로 노출시켜두고 클라이언트는 이 메서드를 호출함으로써 서비스를 이용한다.
ex)다른 패키지에 있는 Activity에서 해당 서비스의 메서드를 호출해 이용할 수 있다
-----------------------------------------------------------------
이 중 이번 글에서 다뤄 볼 예제는 데몬 서비스이다.
우선 작성해야 할 것은
1. Activity를 상속받은 클래스
2. Service를 상속받은 클래스
3. 레이아웃 activity_main.xml
4. AndroidManifest.xml
5. string.xml
을 작업 할 것이다.
-----------------------------------------------------------------
1. Activity
package bit.java39.servicetest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void mOnclick(View view) { Intent intent; if (view.getId() == R.id.newsStart) { // 인텐트에 서비스의 클래스 명이 아닌 액션명을 지정했음. // 외부에서는 다른 패키지에 속한 클래스를 직접 참조할 수 없으므로 액션명을 사용해야한다. // 두 방법의 결과는 동일하다. intent = new Intent("bit.java39.servicetest.NEWS"); // intent = new Intent(this, NewsService.class); startService(intent); textView = (TextView) findViewById(R.id.textView); textView.setText(intent.toString()); } else if (view.getId() == R.id.newsEnd) { intent = new Intent("bit.java39.servicetest.NEWS"); // intent = new Intent(this, NewsService.class); stopService(intent); textView = (TextView) findViewById(R.id.textView); textView.setText(intent.toString()); } } }
2013년 7월 13일 토요일
android 02
android Manifest.xml
- 이 파일은 어플리케이션에 대한 기본적인 정보를 안드로이드 시스템에 제공함으로써,
시스템이 어플리케이션 코드를 실행하기 전에 필요한 정보를 갖고 있도록 한다.
(어플리케이션이 실행되기 전에 시스템이 알고 있어야 하는 파일)
-어플리케이션의 자바 패키지 이름을 지정한다. 이 패키지 이름은 어플리케이션의 고유한 식별자로써 작용한다.
-어플리케이션의 컴포넌트들에 대한 사항을 지정한다.
-각 컴포넌트를 실행시키고 외부에 알리는 클래스의 이름을 지정한다.
-어떤 프로세스가 어플리케이션들의 작동을 주관하는지 결정한다.
-어플리케이션이 다른 API의 보호된 부분에 액세스하고 다른 어플리케이션들과 상호작용하기 위해 가지고 있어야 하는 퍼미션을 선언한다.
-다른 어플리케이션이 이 어플리케이션과 상호작용하기 위해 필요한 퍼미션을 정의한다.
-어플리케이션과 연결되어야 하는 라이브러리를 지정한다.
permission(허가,권한)
- 다른 어플리케이션의 데이터나 서비스를 이용하기 위한 권한을 확보하거나,
다른 어플리케이션이 내 어플리케이션의 데이터에 접근하기 위한 권한을 요청..
- 안드로이드에서 다른 어플리케이션 데이터/서비스에 접그하기 위하여 권한을 확보하는 방법은 AndroidMenifest.xml에 권한을 등록!!!!
레퍼런스 참조 :( http://developer.android.com/reference/android/Manifest.permission.html )
자주 사용하는 권한: INTERNET - 자바 소켓부터 WebView 까지 어떤 방법으로든 인터넷을 사용하기 위해서 필요한 권한
READ_CALENDAR, READ_CONTACTS - 내장된 컨텐트 프로바이더의 데이터를 읽기 위한 권한
WRITE_CALENDAR, WRITE_CONTACTS - 내장된 컨텐트 프로바이더에 데이터를 쓰기 위한 권한
WRITE_EXTERNAL_STORAGE - SD 카드와 같은 외부저장장치의 파일을 쓰기 위한 권한
Intent의 개념
- 안드로이드 어플리케이션의 세개 핵심 컴포넌트(액티비티, 서비스, 브로드캐스트-리시버)는 Intent라는 메시지를 통해 실행된다.
- Intent 메시징은 같거나 다른 어플리케이션에 있는 컴포넌트들간의 런타임 바인딩을 제공하는 장치이다.
- Intent도 Action + Context의 형태를 갖는다.
- 각 컴포넌트에 대해 인텐트를 전달하는 매커니즘
- 액티비티를 새로 시작하거나 기존 액티비티가 새로운 일을 하도록 할 경우,
Context.startActivity()나 Activity.startActivityForResult()에 intent객체를 전달한다.
- 서비스를 시작하거나 실행중인 서비스에 새로운 명령을 전달할 때, Context.startService()에 intent 객체를 전달한다.
호출하는 컴포넌트와 대상 서비스간에 연결을 만들 경우, Context.bindService()에 intent 객체를 전달한다.
만약 서비스가 실행 중이 아닐 경우 그 서비스를 시작할수 있다.
- 브로드캐스트 메서드(Context.sendBroadcast(), Context.sendOrderedBroadcast(),Context.sendStickyBroadcast() 등과 같은)에
전달된 intent 객체는 모든 관심 있는 브로드캐스트 리시버에게 전달된다. 대부분의 브로드캐스트는 시스템 코드에서 시작된다.
Intent Filter
- 수행되어야 할 Action을 서술해 놓은 정보의 묶음이다.
- 이정보에는 수행되었을 때의 데이터, Action을 수행하기 위한 구성요소의 Category, 그리고 또 다른 적절한 지시 등이 포함된다.
-
Service의 수명과 관련된 메서드
- onCreate()
- onStart(Intent intent, int startId)
- onDestroy()
bindService()
- 외부 노출된 인터페이스
- bind된 서비스에서 구현해야할 콜백 메서드
- IBinder onBind(Intent intent)
- 이 메서드의 인자는 bindService()에 전달된 인텐트 객체이다.
- 반환 값은 클라이언트가 서비스와 인터렉션을 하는데 사용할 통신 채널이다.
- boolean onUnbind(Intent intent)
- 이 메서드의 인자는 unbindService()에 전달된 인텐트 객체이다.
- void onRebind(Intent intent)
- 새로운 클라이언트가 서비스에 연결하는 경우 onUnbind()에서 onRebind()를 부른다.
- 이 파일은 어플리케이션에 대한 기본적인 정보를 안드로이드 시스템에 제공함으로써,
시스템이 어플리케이션 코드를 실행하기 전에 필요한 정보를 갖고 있도록 한다.
(어플리케이션이 실행되기 전에 시스템이 알고 있어야 하는 파일)
-어플리케이션의 자바 패키지 이름을 지정한다. 이 패키지 이름은 어플리케이션의 고유한 식별자로써 작용한다.
-어플리케이션의 컴포넌트들에 대한 사항을 지정한다.
-각 컴포넌트를 실행시키고 외부에 알리는 클래스의 이름을 지정한다.
-어떤 프로세스가 어플리케이션들의 작동을 주관하는지 결정한다.
-어플리케이션이 다른 API의 보호된 부분에 액세스하고 다른 어플리케이션들과 상호작용하기 위해 가지고 있어야 하는 퍼미션을 선언한다.
-다른 어플리케이션이 이 어플리케이션과 상호작용하기 위해 필요한 퍼미션을 정의한다.
-어플리케이션과 연결되어야 하는 라이브러리를 지정한다.
permission(허가,권한)
- 다른 어플리케이션의 데이터나 서비스를 이용하기 위한 권한을 확보하거나,
다른 어플리케이션이 내 어플리케이션의 데이터에 접근하기 위한 권한을 요청..
- 안드로이드에서 다른 어플리케이션 데이터/서비스에 접그하기 위하여 권한을 확보하는 방법은 AndroidMenifest.xml에 권한을 등록!!!!
레퍼런스 참조 :( http://developer.android.com/reference/android/Manifest.permission.html )
자주 사용하는 권한: INTERNET - 자바 소켓부터 WebView 까지 어떤 방법으로든 인터넷을 사용하기 위해서 필요한 권한
READ_CALENDAR, READ_CONTACTS - 내장된 컨텐트 프로바이더의 데이터를 읽기 위한 권한
WRITE_CALENDAR, WRITE_CONTACTS - 내장된 컨텐트 프로바이더에 데이터를 쓰기 위한 권한
WRITE_EXTERNAL_STORAGE - SD 카드와 같은 외부저장장치의 파일을 쓰기 위한 권한
Intent의 개념
- 안드로이드 어플리케이션의 세개 핵심 컴포넌트(액티비티, 서비스, 브로드캐스트-리시버)는 Intent라는 메시지를 통해 실행된다.
- Intent 메시징은 같거나 다른 어플리케이션에 있는 컴포넌트들간의 런타임 바인딩을 제공하는 장치이다.
- Intent도 Action + Context의 형태를 갖는다.
- 각 컴포넌트에 대해 인텐트를 전달하는 매커니즘
- 액티비티를 새로 시작하거나 기존 액티비티가 새로운 일을 하도록 할 경우,
Context.startActivity()나 Activity.startActivityForResult()에 intent객체를 전달한다.
- 서비스를 시작하거나 실행중인 서비스에 새로운 명령을 전달할 때, Context.startService()에 intent 객체를 전달한다.
호출하는 컴포넌트와 대상 서비스간에 연결을 만들 경우, Context.bindService()에 intent 객체를 전달한다.
만약 서비스가 실행 중이 아닐 경우 그 서비스를 시작할수 있다.
- 브로드캐스트 메서드(Context.sendBroadcast(), Context.sendOrderedBroadcast(),Context.sendStickyBroadcast() 등과 같은)에
전달된 intent 객체는 모든 관심 있는 브로드캐스트 리시버에게 전달된다. 대부분의 브로드캐스트는 시스템 코드에서 시작된다.
Intent Filter
- 수행되어야 할 Action을 서술해 놓은 정보의 묶음이다.
- 이정보에는 수행되었을 때의 데이터, Action을 수행하기 위한 구성요소의 Category, 그리고 또 다른 적절한 지시 등이 포함된다.
-
Service의 수명과 관련된 메서드
- onCreate()
- onStart(Intent intent, int startId)
- onDestroy()
bindService()
- 외부 노출된 인터페이스
- bind된 서비스에서 구현해야할 콜백 메서드
- IBinder onBind(Intent intent)
- 이 메서드의 인자는 bindService()에 전달된 인텐트 객체이다.
- 반환 값은 클라이언트가 서비스와 인터렉션을 하는데 사용할 통신 채널이다.
- boolean onUnbind(Intent intent)
- 이 메서드의 인자는 unbindService()에 전달된 인텐트 객체이다.
- void onRebind(Intent intent)
- 새로운 클라이언트가 서비스에 연결하는 경우 onUnbind()에서 onRebind()를 부른다.
Android 를 구성하는 기본 요소
리눅스 커널
- 리눅스는 운영체제의 커널.( 엔진 )
- 시스템을 컨트롤하는 하나의 커다란 어플리케이션
- 백그라운드 스레드, 메모리관리, 보안, 디바이 드라이 등의 저수준 관리
- 안드로이드가 리눅스를 채용한 이유는 드라이버의 지원이 광범위하다!!!
달빅 (안드로이드 전용의 가상 머신)
- 모바일 환경에 최적화됨
- 각 프로세서별 별도의 달빅 가상 머신이 할당되므로 안전성이 높고 메모리 사용량을 줄여 복수 개의 가상 머신도 효율적으로 동작하도록 설계됨.
프레임워크 ( 안드로이드 API )
- 응용프로그램은 API를 통해서 라이브러리와 커널을 요청
- 하드웨어 액세스를 추상화
- UI제작에 필요한 위젯을 정의
- 시스템 라이브러리와 통신할 수 있는 래퍼를 제공
4가지 구성요소
- 액티비티
- 사용자 인터페이스를 구성하는 기본 단위
- 눈에 보이는 화면 하나가 액티비티, 여러개의 뷰들로 구성
- 서비스
- 사용자 눈에 직접적으로 보이지 않으며 백그라운드에서 무한히 실행되는 컴포넌트
- 비활성화된 상태에서도 실행
- UI가 없으므로 사용자의 명령을 받아 들일 수 있는 액티비티와 연결해서 사용
- Broadcast Receiver
- 시스템으로부터 전달되는 방송을 대기하고 신호 전달시 수신하는 역할
- 신호만 대기할 뿐 UI를 따로 가지지 않으므로 방송 수신시 방송의 의미를 해석하고 적절한 액티비티를 띄우는 역할
- Content Provider
- 다른 응용 프로그램을 위해 자신의 데이터를 제공
- 응용 프로그램 간에 데이털르 공유할 수 있는 합법적인 유일한 장치
- 예) 데이터베이스, 주소록
매니패스트
- 응용프로그램의 컴포넌트 구성
- 설정 파일에 저장 및 관리
Intent
- 컴포넌트 간의 통신 수단
- 메시지에 대한 상세한 정보를 가진다.
- 예) 주소록 목록 액티비티에서 편집 액티비티를 호출할 때 누구의 주소를 어떤 식으로 편집하라는 지시가 인텐트에 실려 전달된다.
- 리눅스는 운영체제의 커널.( 엔진 )
- 시스템을 컨트롤하는 하나의 커다란 어플리케이션
- 백그라운드 스레드, 메모리관리, 보안, 디바이 드라이 등의 저수준 관리
- 안드로이드가 리눅스를 채용한 이유는 드라이버의 지원이 광범위하다!!!
달빅 (안드로이드 전용의 가상 머신)
- 모바일 환경에 최적화됨
- 각 프로세서별 별도의 달빅 가상 머신이 할당되므로 안전성이 높고 메모리 사용량을 줄여 복수 개의 가상 머신도 효율적으로 동작하도록 설계됨.
프레임워크 ( 안드로이드 API )
- 응용프로그램은 API를 통해서 라이브러리와 커널을 요청
- 하드웨어 액세스를 추상화
- UI제작에 필요한 위젯을 정의
- 시스템 라이브러리와 통신할 수 있는 래퍼를 제공
4가지 구성요소
- 액티비티
- 사용자 인터페이스를 구성하는 기본 단위
- 눈에 보이는 화면 하나가 액티비티, 여러개의 뷰들로 구성
- 서비스
- 사용자 눈에 직접적으로 보이지 않으며 백그라운드에서 무한히 실행되는 컴포넌트
- 비활성화된 상태에서도 실행
- UI가 없으므로 사용자의 명령을 받아 들일 수 있는 액티비티와 연결해서 사용
- Broadcast Receiver
- 시스템으로부터 전달되는 방송을 대기하고 신호 전달시 수신하는 역할
- 신호만 대기할 뿐 UI를 따로 가지지 않으므로 방송 수신시 방송의 의미를 해석하고 적절한 액티비티를 띄우는 역할
- Content Provider
- 다른 응용 프로그램을 위해 자신의 데이터를 제공
- 응용 프로그램 간에 데이털르 공유할 수 있는 합법적인 유일한 장치
- 예) 데이터베이스, 주소록
매니패스트
- 응용프로그램의 컴포넌트 구성
- 설정 파일에 저장 및 관리
Intent
- 컴포넌트 간의 통신 수단
- 메시지에 대한 상세한 정보를 가진다.
- 예) 주소록 목록 액티비티에서 편집 액티비티를 호출할 때 누구의 주소를 어떤 식으로 편집하라는 지시가 인텐트에 실려 전달된다.
피드 구독하기:
글 (Atom)