Najlepszy samouczek Android (usługa) W 2024 r. W tym samouczku możesz dowiedzieć się Przykłady,
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:
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() { } }
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 pl. /> 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 pl. /> 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 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:
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:
Kliknij na dole przycisk "out of service", można zatrzymać usługę.