Latest web development tutorials

Android (usługa)

Usługa jest składnikiem działa w tle, realizacja długo uruchomione zadanie i nie wymaga interakcji użytkownika. Nawet jeśli aplikacja jest niszczona również nadal pracować. Usługi obejmujące zasadniczo dwa stany -

stan opis
Rozpoczęte Android komponentów aplikacji, takich jak działalność poprzez StartService (), aby uruchomić usługę, usługa jest uruchomiona stan. Po uruchomieniu usługa może działać w tle, na czas nieokreślony, terminowe uruchomienie jego składników zostały zniszczone.
granica Gdy składniki aplikacji Android poprzez bindService (), aby powiązać usługę, usługa jest państwo związane. Związany obsługa państwo zapewnia interfejs klient-serwer w celu umożliwienia elementy interakcji z usługi, takie jak wysłanie żądania do uzyskania wyników, nawet dla komunikacji między procesami przez IPC.

Usługa ma podejście cyklu życia mogą być wdrożone w celu monitorowania zmian statusu usługi mogą być wykonywane na odpowiednim etapie. Poniżej przedstawiono, gdy usługa () zostanie utworzony poprzez StartService gdy okres deklaracji, zostanie wyświetlony odpowiedni, gdy usługa () jest tworzony przez cykl życia bindService lewej:

obrazobraz

Aby utworzyć usługę, należy utworzyć klasę, która dziedziczy z klasy bazowej serwisu lub jej znane podklasy klas Javy. Klasa bazowa Usługa definiuje różne metody i najważniejsze metody wywołania zwrotnego. Nie trzeba wdrożyć wszystkie metody wywołania zwrotnego. Niemniej jednak, aby zrozumieć wszystkie metody jest bardzo ważne. Te wywołania zwrotne mogą zapewnić swoim wniosku do pożądany sposób użytkownika.

oddzwaniania opis
onStartCommand () Pozostałe elementy (takie jak aktywność), wywołując StartService (), aby rozpocząć zlecenie usługi, system wywołuje metodę. W przypadku zastosowania tej metody, mają obowiązek zatrzymać usługę, gdy praca jest zakończona stopSelf () lub stopService () metoda.
onBind Jeśli chcesz powiązać inne komponenty i usług poprzez bindService (), system wywołuje metodę. W przypadku zastosowania tej metody, trzeba zwrócić przedmiot IBinder zapewnić interfejs dla klientów, aby komunikować się z obsługą. Należy wdrożyć tę metodę, jeśli nie pozwalają na wiązanie, wystarczy zwrócić null.
onUnbind () Gdy interfejs klienta dla wszystkich specjalnym wydaniu obsługi przerwania, system wywołuje metodę.
onRebind () W przypadku podłączania nowych klientów do serwisu, a po nim został odłączony od onUnbind (Intent) zawiadomienie, system wywołuje metodę.
onCreate () Gdy usługi poprzez onStartCommand () i onBind () najpierw stworzył system wywołuje metodę. Połączenie wymaga wdrożenia instalacji jednorazowej.
onDestroy () Gdy usługa nie jest już użyteczne lub zniszczone jest system wywołuje metodę. Usługa potrzeba wdrożenia tej metody, aby oczyścić wszelkie zasoby, takie jak nici, zarejestrowanych słuchaczy, odbiorniki, i tak dalej.

Poniższy Główną usługą pokazuje cykl życia każdej metody -

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() {

    }
}

Przykłady

Ten przykład pokaże proste kroki, w jaki sposób stworzyć swój własny serwis Android. Wykonaj następujące kroki, aby zmodyfikować aplikację Android wcześniej utworzonego w Hello World sekcji Przykłady:

krok opis
1 Korzystanie z Androidem Studio IDE do tworzenia aplikacji na Androida i nazwa androidservices w pakiecie cn.uprogrammer.androidservices. Podobne przykłady sekcja Hello World.
2 Modyfikacja głównym aktywnym pliku MainActivity.java dodać StartService () i metoda stopService ().
3 Utwórz nowy MyService.java plików Java w cn.uprogrammer.androidservices pakietów. Plik ten pozwoli Android a metody związane z usługą.
4 Aby zdefiniować usługi użyć <usługa ... /> w pliku AndroidManifest.xml. Aplikacja może mieć jedną lub więcej usług bez ograniczeń.
5 Modyfikacja RES / plik Układ / activity_main.xml w układzie domyślnym, układ Internecie zawiera dwa przyciski.
6 Nie res / wartości / strings.xml zgłaszał stałe zostać zmodyfikowane. Android Studio będzie zwrócić uwagę na wartość ciągu.
7 Uruchom emulator systemu Android, aby uruchomić aplikację i sprawdzić wyniki zmian wprowadzonych do wniosku.

Oto główny plik aktywność pliku src / cn.uprogrammer.androidservices / MainActivity.java modyfikowanych. Plik ten zawiera wszystkie podstawowe podejście oparte na cyklu życia. Dodaliśmy StartService () i metody stopService (), aby rozpocząć i zatrzymać usługę.

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));
    }
}

Poniżej znajduje się treść src / cn.uprogrammer.androidservices / MyService.java dnia. Plik ten może implementować jeden lub więcej usług związanych z metodą opartą na żądanie. Dla początkujących, tylko realizujemy onStartCommand () i 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();
    }
}

Będziemy modyfikować plik AndroidManifest.xml. Tu dodać <service ... /> tag obejmuje nasze usługi:

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

Poniżej znajduje się treść pliku res / layout / activity_main.xml zawiera dwa przyciski:

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

Oto treść RES / wartości / strings.xml jest zdefiniowanie dwóch nowych stałych:

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

Załóżmy, wystarczy uruchomić zmodyfikowany moja aplikacja Application. Zakładam, że utworzyliśmy AVD podczas środowiska instalacji. Otwórz projekt w aktywnym pliku, kliknij przycisk na pasku narzędzi obraz Ikona, aby uruchomić aplikację w Android Studio. Android Studio zainstalować aplikację na AVD i uruchamia go. Jeśli wszystko pójdzie dobrze, to zostanie wyświetlona w oknie emulatora w następujący sposób:

obraz

Teraz kliknij przycisk "Uruchom usługę", aby uruchomić usługę, która będzie wykonywał onStartCommand piszemy () metoda, jest "usługa została uruchomiona" pojawia się komunikat na dole symulatorze, co następuje:

obraz

Kliknij na dole przycisk "out of service", można zatrzymać usługę.