Latest web development tutorials

안드로이드 서비스 (서비스)

서비스는 백그라운드에서 실행 구성 요소, 장기 실행 작업의 구현 및 사용자 상호 작용을 필요로하지 않습니다. 애플리케이션은 또한 파괴 되더라도 여전히 작동한다. 기본적으로 두 가지 상태를 포함하는 서비스 -

상태 기술
시작 이러한 활동으로 안드로이드 응용 프로그램 구성 요소는, startService를 통해 () 서비스를 시작, 서비스 상태를 시작한다. 시작하면 서비스가 무기한, 그 구성 요소의 적시 출시가 파괴 된 백그라운드에서 실행할 수 있습니다.
경계 bindService ()를 통해 안드로이드 애플리케이션 컴포넌트 서비스를 바인딩하는 경우, 서비스 바인딩 상태이다. 바인딩 주 서비스 성분은 심지어 IPC를 통해 프로세스 간 통신을 위해, 결과를 얻기위한 요청을 전송하는 바와 같이, 서비스와 상호 작용하도록 허용하기 위해 클라이언트 서버 인터페이스를 제공한다.

서비스 라이프 사이클 접근법 서비스 상태의 변화가 적절한 스테이지에서 수행 될 수있다 모니터링하도록 구현 될 수 있습니다. 다음은 서비스 () bindService 라이프 사이클에 의해 생성 될 때 선언 기간, 오른쪽이 표시 될 때 서비스 () startService 의해 만들어진 좌측 보여준다

그림그림

서비스를 만들려면 기본 클래스 서비스 또는 알려진 서브 클래스 자바 클래스에서 상속하는 클래스를 작성해야합니다. 서비스 기본 클래스는 다양한 방법 및 중요한 콜백 메소드를 정의한다. 사용자는 콜백 방법 모두를 구현할 필요가 없다. 그럼에도 불구하고, 모든 방법을 이해하는 것이 매우 중요합니다. 이 콜백은 보장 할 수 있습니다 사용자가 원하는 방식으로 응용 프로그램이.

콜백 기술
onStartCommand () startService를 호출하여 다른 구성 요소 (예 : 활동 등) () 서비스 요청을 시작, 시스템은 메소드를 호출합니다. 이 방법을 구현하는 경우, 당신은 작업이 stopSelf () 또는 stopService () 메소드가 완료되면 서비스를 중지 할 책임이 있습니다.
onBind 만약 bindService ()를 통해 다른 구성 요소와 서비스를 결합 할 때, 시스템은 메소드를 호출한다. 이 방법을 구현하는 경우, 당신은 고객이 서비스와 통신하기위한 인터페이스를 제공하기 위해 IBinder 객체를 반환해야합니다. 당신은 단순히 널 (null)을 결합 반환 할 수없는 경우에는이 방법을 구현해야합니다.
onUnbind () 모든 특수 인터럽트 서비스 릴리스 고객 인터페이스 시스템이 메소드를 호출 할 때.
onRebind () 그 후 새로운 클라이언트 서비스에 접속하고,이 onUnbind 의해 연결되어있는 경우 (의도) 통지, 시스템은 메소드를 호출한다.
에서 onCreate () onStartCommand () 및 onBind ()을 통해 서비스가 처음 생성되는 경우, 시스템은 메소드를 호출한다. 호출이 한 번 설치의 구현을 필요로한다.
들의 OnDestroy () 서비스가 더 이상 유용하거나 소멸 될 때, 시스템은 메소드를 호출하지 않는다. 당신의 서비스는 등등 스레드, 등록 된 청취자, 수신기와 같은 자원을 정리하기 위해이 방법을 구현해야합니다.

다음과 같은 주요 서비스 각각에있어서의 라이프 사이클을 증명 -

package cn.uprogrammer.androidservices;

import android.app.Service;
import android.os.IBinder;
import android.content.Intent;
import android.os.Bundle;

public class HelloService extends Service {

    /** 标识服务如果被杀死之后的行为 */
    int mStartMode;

    /** 绑定的客户端接口 */
    IBinder mBinder;

    /** 标识是否可以使用onRebind */
    boolean mAllowRebind;

    /** 当服务被创建时调用. */
    @Override
    public void onCreate() {

    }

    /** 调用startService()启动服务时回调 */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return mStartMode;
    }

    /** 通过bindService()绑定到服务的客户端 */
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    /** 通过unbindService()解除所有客户端绑定时调用 */
    @Override
    public boolean onUnbind(Intent intent) {
        return mAllowRebind;
    }

    /** 通过bindService()将客户端绑定到服务时调用*/
    @Override
    public void onRebind(Intent intent) {

    }

    /** 服务不再有用且将要被销毁时调用 */
    @Override
    public void onDestroy() {

    }
}

이 예제는 당신에게 당신의 자신의 안드로이드 서비스를 만드는 방법에 대한 간단한 단계를 표시합니다. 이전 안녕하세요 세계 예제 절에서 만든 안드로이드 응용 프로그램을 수정하려면 다음 단계를 따르십시오 :

단계 기술
(1) 안드로이드 스튜디오 IDE를 사용하여 cn.uprogrammer.androidservices 패키지에서 안드로이드 응용 프로그램과 이름 androidservices을 만들 수 있습니다. 비슷한 예 안녕하세요 섹션.
수정 주요 활성 파일 MainActivity.java 추가 startService ()와 stopService () 메소드.
3 패키지 cn.uprogrammer.androidservices에 새로운 자바 파일 MyService.java을 만듭니다. 이 파일은 안드로이드 서비스 관련 방법을 만들 것입니다.
4 서비스가 사용 정의하려면 <서비스 ... />을의 AndroidManifest.xml 파일에 태그입니다. 응용 프로그램은 임의의 제한없이 하나 이상의 서비스를 가질 수있다.
(5) 기본 레이아웃에서 고해상도 / 레이아웃 / activity_main.xml 파일을 수정하여 온라인 레이아웃은 두 개의 버튼이 포함되어 있습니다.
6 입술 / 값 / 어떤 상수 파일 strings.xml의하지 않는 것은 수정합니다. 안드로이드 스튜디오 문자열 값을주의 할 것이다.
(7) 응용 프로그램을 실행하고 응용 프로그램에 대한 변경의 결과를 확인하기 위해 안드로이드 에뮬레이터를 실행합니다.

다음은 주요 활동 파일 SRC ​​/ cn.uprogrammer.androidservices / MainActivity.java 파일 수정 된 내용입니다. 이 파일은 모든 기본적인 라이프 사이클 접근 방식을 포함합니다. 우리는 시작하고 서비스를 중지 startService ()와 stopService () 메소드를 추가했습니다.

package cn.uprogrammer.androidservices;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;


import android.content.Intent;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    // Method to start the service
    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));
    }
}

다음의 SRC / cn.uprogrammer.androidservices / MyService.java의 내용이다. 이 파일은 수요에 따라 메소드와 연관된 하나 이상의 서비스를 구현할 수있다. 신규 이민자를 들어, 우리는 onStartCommand () 및들의 OnDestroy ()을 실현 -

package cn.uprogrammer.androidservices;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class MyService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Let it continue running until it is stopped.
        Toast.makeText(this, "服务已经启动", Toast.LENGTH_LONG).show();
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "服务已经停止", Toast.LENGTH_LONG).show();
    }
}

우리의 AndroidManifest.xml 파일을 수정합니다. 여기에 추가 <서비스 ... /> 태그는 우리의 서비스를 포함 :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.androidservices"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk
        android:minSdkVersion="13"
        android:targetSdkVersion="22" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >

            <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>

입술 / 레이아웃 / 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="Android 服务实例"
        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="www.uprogrammer.cn"
        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/ic_launcher"
        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="启动服务"
        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="停止服务"
        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>

여기에 입술 / 값 / strings.xml의의 내용은 두 가지 새로운 상수를 정의입니다 :

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Android Services</string>
    <string name="title_activity_main">MainActivity</string>
    <string name="menu_settings">Settings</string>
    <string name="action_settings">Settings</string>

</resources>

그냥 수정 된 내 응용 프로그램 응용 프로그램을 실행할 수 있습니다. 난 당신이 설치 환경 동안 AVD를 만든 가정합니다. 활성 파일에서 프로젝트를 열고 도구 모음에서 클릭 그림 아이콘은 안드로이드 Studio에서 응용 프로그램을 실행합니다. 안드로이드 Studio는 AVD에 응용 프로그램을 설치하고 시작합니다. 모두가 잘된다면 다음과 같이, 그것은 에뮬레이터 창에 표시됩니다 :

그림

이제 다음과 같이 실행할 서비스를 시작하는 "서비스 시작"버튼을 클릭 onStartCommand 우리는 () 메서드를 작성하는 "서비스가 시작되었습니다"라는 메시지가, 시뮬레이터의 하단에 나타납니다 :

그림

"출력 서비스"버튼의 하단을 클릭, 당신은 서비스를 중지 할 수 있습니다.