Android-서비스
ㅏ service사용자와 상호 작용할 필요없이 백그라운드에서 실행되어 장기 실행 작업을 수행하는 구성 요소이며 응용 프로그램이 파괴 되어도 작동합니다. 서비스는 기본적으로 두 가지 상태를 취할 수 있습니다.
Sr. 아니. | 상태 및 설명 |
---|---|
1 | Started 서비스는 started애플리케이션 구성 요소는, 이러한 활동으로, 호출을 시작할 때 startService를 () . 서비스가 시작되면 서비스를 시작한 구성 요소가 삭제 되더라도 백그라운드에서 무기한으로 실행될 수 있습니다. |
2 | Bound 서비스는 bound응용 프로그램 구성 요소가 bindService () 를 호출하여 바인딩 할 때 . 바인딩 된 서비스는 구성 요소가 서비스와 상호 작용하고, 요청을 보내고, 결과를 얻고, 프로세스 간 통신 (IPC)을 통해 프로세스간에이를 수행 할 수 있도록하는 클라이언트-서버 인터페이스를 제공합니다. |
서비스에는 서비스 상태의 변경 사항을 모니터링하기 위해 구현할 수있는 수명주기 콜백 메서드가 있으며 적절한 단계에서 작업을 수행 할 수 있습니다. 왼쪽의 다음 다이어그램은 startService ()로 서비스를 생성 할 때의 수명주기를 보여주고 오른쪽의 다이어그램은 bindService ()로 서비스를 생성 할 때의 수명주기를 보여줍니다. (image courtesy : android.com)
서비스를 작성하려면 서비스 기본 클래스 또는 기존 서브 클래스 중 하나를 확장하는 Java 클래스를 작성하십시오. 그만큼Service기본 클래스는 다양한 콜백 메소드를 정의하며 가장 중요한 것은 다음과 같습니다. 모든 콜백 메서드를 구현할 필요는 없습니다. 그러나 각각을 이해하고 앱이 사용자가 기대하는 방식으로 작동하도록 구현하는 것이 중요합니다.
Sr. 아니. | 콜백 및 설명 |
---|---|
1 | onStartCommand() 시스템은 활동과 같은 다른 구성 요소가 startService () 를 호출하여 서비스 시작을 요청할 때이 메서드를 호출 합니다. 이 메서드를 구현하는 경우 서비스 작업이 완료되면 stopSelf () 또는 stopService () 메서드 를 호출하여 서비스를 중지해야 합니다. |
2 | onBind() 다른 구성 요소가 bindService () 를 호출하여 서비스와 바인딩하려는 경우 시스템이이 메서드를 호출 합니다. 이 메서드를 구현하는 경우 IBinder 개체 를 반환하여 클라이언트가 서비스와 통신하는 데 사용하는 인터페이스를 제공해야 합니다. 항상이 메서드를 구현해야하지만 바인딩을 허용하지 않으려면 null 을 반환해야합니다 . |
삼 | onUnbind() 시스템은 모든 클라이언트가 서비스에서 게시 한 특정 인터페이스에서 연결이 끊어졌을 때이 메서드를 호출합니다. |
4 | onRebind() 시스템은 이전에 onUnbind (Intent) 에서 모든 연결이 끊어 졌다는 알림을받은 후 새 클라이언트가 서비스에 연결되었을 때이 메서드를 호출합니다 . |
5 | onCreate() 시스템은 onStartCommand () 또는 onBind ()를 사용하여 서비스를 처음 만들 때이 메서드를 호출합니다 . 이 호출은 일회성 설정을 수행하는 데 필요합니다. |
6 | onDestroy() 시스템은 서비스가 더 이상 사용되지 않고 파괴 될 때이 메소드를 호출합니다. 서비스는 스레드, 등록 된 리스너, 수신자 등과 같은 모든 리소스를 정리하기 위해이를 구현해야합니다. |
다음 스켈레톤 서비스는 각 라이프 사이클 방법을 보여줍니다.
package com.tutorialspoint;
import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;
public class HelloService extends Service {
/** indicates how to behave if the service is killed */
int mStartMode;
/** interface for clients that bind */
IBinder mBinder;
/** indicates whether onRebind should be used */
boolean mAllowRebind;
/** Called when the service is being created. */
@Override
public void onCreate() {
}
/** The service is starting, due to a call to startService() */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return mStartMode;
}
/** A client is binding to the service with bindService() */
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
/** Called when all clients have unbound with unbindService() */
@Override
public boolean onUnbind(Intent intent) {
return mAllowRebind;
}
/** Called when a client is binding to the service with bindService()*/
@Override
public void onRebind(Intent intent) {
}
/** Called when The service is no longer used and is being destroyed */
@Override
public void onDestroy() {
}
}
예
이 예제는 자신 만의 Android 서비스를 만드는 방법을 보여주는 간단한 단계를 안내합니다. Hello World 예제 장 에서 만든 Android 애플리케이션을 수정하려면 다음 단계를 따르십시오.
단계 | 기술 |
---|---|
1 | Android StudioIDE를 사용하여 Android 애플리케이션을 만들고 Hello World 예제 장에 설명 된대로 com.example.tutorialspoint7.myapplication 패키지 아래에서 My Application 으로 이름을 지정합니다 . |
2 | 기본 활동 파일 MainActivity.java 를 수정 하여 startService () 및 stopService () 메소드 를 추가하십시오 . |
삼 | com.example.My Application 패키지 아래에 새 Java 파일 MyService.java를 만듭니다 . 이 파일에는 Android 서비스 관련 메소드가 구현됩니다. |
4 | <service ... /> 태그를 사용하여 AndroidManifest.xml 파일 에서 서비스를 정의하십시오 . 응용 프로그램에는 제한없이 하나 이상의 서비스가있을 수 있습니다. |
5 | res / layout / activity_main.xml 파일 의 기본 내용을 수정하여 선형 레이아웃에 두 개의 버튼을 포함합니다. |
6 | res / values / strings.xml 파일 에서 상수를 변경할 필요가 없습니다 . Android 스튜디오는 문자열 값을 처리합니다. |
7 | 애플리케이션을 실행하여 Android 에뮬레이터를 시작하고 애플리케이션에서 수행 한 변경 결과를 확인합니다. |
다음은 수정 된 주요 활동 파일의 내용입니다. MainActivity.java. 이 파일에는 각 기본 라이프 사이클 방법이 포함될 수 있습니다. 서비스를 시작하고 중지하기 위해 startService () 및 stopService () 메서드를 추가했습니다 .
package com.example.tutorialspoint7.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
String msg = "Android : ";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(msg, "The onCreate() event");
}
public void startService(View view) {
startService(new Intent(getBaseContext(), MyService.class));
}
// Method to stop the service
public void stopService(View view) {
stopService(new Intent(getBaseContext(), MyService.class));
}
}
다음 내용은 MyService.java. 이 파일은 요구 사항에 따라 서비스와 연관된 하나 이상의 메소드를 구현할 수 있습니다. 지금 우리는 두 가지 방법을 구현하려고하는 onStartCommand () 및 들의 OnDestroy () -
package com.example.tutorialspoint7.myapplication;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.widget.Toast;
/**
* Created by TutorialsPoint7 on 8/23/2016.
*/
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Let it continue running until it is stopped.
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
}
다음은 AndroidManifest.xml 파일 의 수정 된 내용입니다 . 여기에 서비스를 포함하기 위해 <service ... /> 태그를 추가했습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tutorialspoint7.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyService" />
</application>
</manifest>
다음 내용은 res/layout/activity_main.xml 두 개의 버튼을 포함하는 파일-
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Example of services"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
android:text="Start Services"
android:onClick="startService"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop Services"
android:id="@+id/button"
android:onClick="stopService"
android:layout_below="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignStart="@+id/button2"
android:layout_alignRight="@+id/button2"
android:layout_alignEnd="@+id/button2" />
</RelativeLayout>
수정 된 내용을 실행 해 보겠습니다. Hello World!방금 수정 한 응용 프로그램입니다. 나는 당신이 당신의AVD환경 설정을하는 동안. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고
이제 서비스를 시작하려면 Start Service버튼을 누르면 서비스가 시작되고 onStartCommand () 메소드 의 프로그래밍에 따라 다음과 같이 시뮬레이터 하단에 Service Started 메시지 가 나타납니다.
서비스를 중지하려면 서비스 중지 버튼을 클릭합니다.