Android 서비스 자습서 : 백그라운드에서 애플리케이션을 실행하는 방법은 무엇입니까?



이 Android 서비스 자습서는 음악 재생과 같은 백그라운드에서 작업을 수행하는 방법을 이해하는 데 도움이됩니다. UI가 연결되어 있지 않습니다.

종종 스마트 폰에서 여러 응용 프로그램을 사용하는 경우 한 응용 프로그램에서 다른 응용 프로그램으로 전환하고 모든 응용 프로그램이 백그라운드에서 활성 상태로 유지되도록 할 수 있습니다. 이들은 제공하는 서비스에 불과합니다. . 따라서 Android 서비스 자습서에 대한이 기사는 서비스 작업 방법을 이해하는 데 도움이됩니다.

다음 주제를 다룰 것입니다.





Android 서비스 란 무엇입니까?

서비스는 기본적으로 프로세스입니다. Android 서비스 수행하기 위해 백그라운드에서 실행되는 구성 요소입니다.사용자와 상호 작용하지 않고 장기 실행 작업을 수행하며 응용 프로그램이 파괴 되어도 작동합니다.다른 응용 프로그램 구성 요소는 서비스를 시작할 수 있으며 다른 응용 프로그램으로 전환하더라도 백그라운드에서 계속 실행됩니다.

또한 구성 요소는 서비스와 상호 작용하고 프로세스 간 통신을 수행하기 위해 자신을 서비스에 바인딩 할 수 있습니다.



공개 문자열 tostring ()

노트 : android.app.Service는 ContextWrapper 클래스의 하위 클래스이며 Android 서비스는 스레드 또는 별도의 프로세스가 아닙니다.

Android- 서비스 수명주기

Android 서비스 수명주기에는 두 가지 형태의 서비스가있을 수 있습니다. 서비스의 수명주기는 다음 두 가지 경로를 따릅니다.

  1. 시작
  2. 경계

시작



응용 프로그램 구성 요소가 호출하면 서비스가 시작됩니다. startService () 방법. 일단 시작되면 시작을 담당하는 구성 요소가 파괴 되더라도 서비스는 백그라운드에서 무기한으로 실행될 수 있습니다. 사용하여 중지됩니다. stopService () 방법. 서비스는 또한 stopSelf () 방법.

경계

응용 프로그램 구성 요소가 다음을 호출하여 바인딩 될 때 서비스가 바인딩됩니다. bindService () . 바운드 서비스는 구성 요소가 서비스와 상호 작용하고, 요청을 보내고, 결과를 얻을 수 있도록하는 클라이언트-서버 인터페이스를 제공합니다. 프로세스 간 통신 (IPC)을 통해 처리합니다. 클라이언트는 다음을 호출하여 서비스 바인딩을 해제 할 수 있습니다. unbindService () 방법.

Android 서비스 수명주기-Android 서비스 자습서-Edureka

Android 서비스에 대한이 문서의 다음 섹션으로 이동하여서비스 클래스 아래의 메서드.

Android 서비스 자습서 : 방법

모든 응용 프로그램에서 작업을 쉽게 수행 할 수있는 몇 가지 방법이 있습니다. 그들 중 일부는 다음과 같습니다.

방법기술
onStartCommand ()

이 메서드는 활동과 같은 다른 구성 요소가 다음을 호출하여 서비스 시작을 요청할 때 호출됩니다. startService () .

서비스를 이용하여 해당 작업이 완료되면 서비스를 중지하는 것은 귀하의 책임입니다. stopSelf () 또는 stopService () 행동 양식.

바인딩 해제 ()

다른 구성 요소가 다음을 호출하여 서비스와 바인딩하려는 경우이 메서드를 호출합니다. bindService () .

이를 구현하려면 클라이언트가 서비스와 통신하기 위해 사용하는 인터페이스를 제공해야합니다. 그것은 IBinder 목적. 바인딩을 허용하지 않으려면 없는 .

onUnbind ()

시스템은 모든 클라이언트가 서비스에서 게시 한 특정 인터페이스에서 연결이 끊어 질 때이 메서드를 호출합니다.

onRebind ()

이전에 모든 연결이 끊어 졌다는 알림을받은 후 새 클라이언트가 서비스에 연결될 때이 메서드를 호출합니다. onUnbind (의도) .

onCreate ()

시스템은 다음을 사용하여 서비스를 처음 만들 때이 메서드를 호출합니다. onStartCommand () 또는 바인딩 해제 () . 일회성 설정을 수행해야합니다.

onDestroy ()

이 메서드는 서비스가 더 이상 사용되지 않고 폐기 될 때 호출됩니다. 스레드, 등록 된 리스너, 수신자 등과 같은 리소스를 정리하려면 서비스에서이를 구현해야합니다.

스켈레톤 코드

public class MainActivity extends Activity {private TextView textView private BroadcastReceiver receiver = new BroadcastReceiver () {@Override public void onReceive (Context context, Intent intent) {Bundle bundle = intent.getExtras () if (bundle! = null) {String string = bundle.getString (DownloadService.FILEPATH) int resultCode = bundle.getInt (DownloadService.RESULT) if (resultCode == RESULT_OK) {Toast.makeText (MainActivity.this, '다운로드 완료. 다운로드 URI :'+ string, Toast.LENGTH_LONG) .show () textView.setText ( '다운로드 완료')} else {Toast.makeText (MainActivity.this, '다운로드 실패', Toast.LENGTH_LONG) .show () textView.setText ( '다운로드 실패')}}}} @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) textView = (TextView) findViewById (R.id.status)} @Override protected void onResume () {super.onResume ( ) registerReceiver (receiver, new IntentFilter (DownloadService.NOTIFICATION))} @Override protected void onPause () {super.onPause () unregisterReceiver (receiver)} public void onClick (View view) {Intent intent = new Intent (this, DownloadService.class) // 다운로드 할 파일과 위치에 대한 서비스 정보 추가 store intent.putExtra (DownloadService.FILENAME, 'index.html') intent.putExtra (DownloadService.URL, 'www.edureka.co') startService (intent) textView.setText ( '서비스 시작됨')}}

이 예에서는 다음과 같은 방법을 볼 수 있습니다. onCreate () , onResume () , onPause () . 이러한 메서드는 Android에서 서비스의 구조를 구성합니다.

이제이 Android 서비스 자습서의 실제 부분을 살펴 보겠습니다.서비스를 만들고 처리하는 방법.

데모

백그라운드에서 음악을 재생하는 방법을 살펴 보겠습니다. 이를 위해 저는 Andriod 스튜디오 .

1 단계

비어있는 새 프로젝트를 만듭니다. 프로젝트 이름을 지정하고 Java 폴더를 클릭 한 다음 MainActivity . 먼저 미디어 플레이어 시작, 루프 설정 등과 같은 플레이어 세부 정보를 가져올 수 있습니다.

package com.example.mydemoapplication import androidx.appcompat.app.AppCompatActivity public class MainActivity extends AppCompatActivity {@Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) setContentView (R.layout.activity_main) MediaPlayer player = MediaPlayer.create (this, Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()}}

참고 : 처음 사용하는 경우 BIOS를 활성화하는 것을 잊지 마십시오. 시스템을 다시 시작하면됩니다.

가상 장치를 추가해야합니다. 클릭하세요 AVD 관리자를 엽니 다.

원하는 장치를 선택하면 바로 사용할 수 있습니다!

이것은 화면이 활성 상태 일 때만 실행되지만이 응용 프로그램이 백그라운드에서도 작동하게하려면 몇 줄의 코드를 추가해야합니다. activity_main.xml 파일.

2 단계

해당 코드를 실행하면 응용 프로그램을 실행할 수 있고 백그라운드에서 음악을 재생할 수 있습니다. 즉, 다른 응용 프로그램이 열려있는 경우에도이 오디오는 계속 재생됩니다.

이것이 어떻게 이루어질 수 있는지 봅시다.

  • Java 폴더에 다른 클래스를 만들고 이름을 지정합니다. 여기에서는 ' MyService '.
  • 이 클래스는 서비스 클래스를 확장합니다.
  • 서비스 클래스 메소드가 있으면 다음을 클릭하여 메소드를 구현하십시오. alt + Enter.
  • 그 후에 메서드를 재정의해야합니다. 따라서 창을 마우스 오른쪽 버튼으로 클릭하면 옵션이 표시됩니다.
  • 재정의 방법을 생성하고 onStartCommand () , 및 OnDestroy ().
  • 편집 onStartCommand () 다음 코드를 추가하여 메서드. :
MediaPlayer player = MediaPlayer.create (this, Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()

노트 : 이 코드를 MainActivity.

  • 그러면 문을 제거하라는 오류가 발생합니다. 따라서 return 문을 제거하고 MediaPlayer를 개인 메서드로 선언하고 START_STICKY . 시작 상태를 반환합니다.
  • 더하다 player.stop ()onDestroy () 방법.

3 단계

이동 소고기 레이아웃으로 이동하여 android_main.xml 응용 프로그램의 XML 파일을 가져옵니다.

  • TextView를 제거하고 LinearLayout으로 바꾸고 Button을 추가합니다. 해당 코드를 추가하십시오.
<LinearLayout 기계적 인조 인간:정위= '수직' 기계적 인조 인간: layout_width= 'match_parent' 기계적 인조 인간: layout_height= 'wrap_content' 기계적 인조 인간: layout_centerVertical= '참' 도구: 무시= 'MissingConstraints'><단추 기계적 인조 인간:신분증= '@ + id / buttonStart' 기계적 인조 인간:본문= '서비스 시작' 기계적 인조 인간: layout_width= 'wrap_content' 기계적 인조 인간: layout_height= 'match_parent'/><단추 기계적 인조 인간:신분증= '@ + id / buttonStop' 기계적 인조 인간:본문= '서비스 중지' 기계적 인조 인간: layout_width= 'wrap_content' 기계적 인조 인간: layout_height= 'match_parent'/>LinearLayout>
  • 이 작업을 마치면 MainActivity 클래스를 만들고 해당 코드를 추가하여 XML 파일과 MyServiceClass.
package com.example.newproject import androidx.appcompat.app.AppCompatActivity public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button start, stop @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) setContentView (R.layout .activity_main) start = (Button) findViewById (R.id.buttonStart) stop = (Button) findViewById (R.id.buttonStop) start.setOnClickListener (this) stop.setOnClickListener (this)} @Override public void onClick (View view ) {if (view == start) {startService (new Intent (this, MyServiceClass.class))} else if (view == stop) {stopService (new Intent (this, MyServiceClass.class))}}}

4 단계

클래스 연결이 완료되면 코드를 실행 해 보겠습니다.

참고 : AndroidManifiest.xml 파일에 서비스 클래스 이름을 추가하십시오.

다음으로 코드를 실행 해 보겠습니다.

서비스를 시작하면 다른 응용 프로그램이 열려 있어도 백그라운드에서 실행됩니다. 버튼을 클릭하여 서비스를 시작하거나 중지 할 수 있습니다.

이것은 Android 서비스로 작업하는 방법을 배운 간단한 데모입니다.

이것으로 '안드로이드 서비스 튜토리얼'에 대한이 기사의 끝으로 왔습니다.이 블로그에서 다루는 주제를 명확하게 이해하시기 바랍니다.

이제 Android 서비스 자습서 블로그를 살펴 보았으므로 Edureka의 학습을 빠르게 시작합니다.

질문이 있습니까? 이 'Android 서비스 자습서'블로그의 댓글에서 언급하는 것을 잊지 마십시오. 다시 연락 드리겠습니다.