Serviço Android (Service)
O serviço é um componente executado em segundo plano, a execução de uma missão de longa duração e não requer interação do usuário. Mesmo se o pedido for destruída, também continuam a trabalhar. Serviços que compreendem essencialmente dois estados -
estado | descrição |
---|---|
começado | componentes de aplicativos Android, como atividades, por meio StartService () para iniciar o serviço, o serviço é iniciado Estado. Uma vez iniciado, o serviço pode ser executado em segundo plano por tempo indeterminado, lançamento atempado dos seus componentes foram destruídas. |
encadernado | Quando os componentes de aplicativos Android através bindService () para ligar o serviço, o serviço é Estado vinculado. serviço de estado ligado fornece uma interface cliente-servidor para permitir que os componentes para interagir com o serviço, como o envio de um pedido para obter os resultados, mesmo para a comunicação inter-processo através do IPC. |
Serviço tem uma abordagem ciclo de vida pode ser implementado para monitorar as alterações de estado de serviço pode ser realizado na fase apropriada. O seguinte mostra a esquerda quando o serviço () é criado por StartService quando o período de declaração, à direita é exibida quando o serviço () é criado pelo ciclo de vida bindService:
Para criar o serviço, você precisa criar uma classe que herda a partir do Serviço de classe base ou de suas subclasse conhecida classes Java. classe base serviço define os diferentes métodos e o método de retorno mais importante. Você não precisa para implementar todo o método de retorno. No entanto, para entender todos os métodos é muito importante. Estes retornos de chamada pode garantir que a sua aplicação a forma desejada do usuário.
callback | descrição |
---|---|
onStartCommand () | Outros componentes (tais como a atividade) chamando StartService () para iniciar a solicitação de serviço, o sistema chama o método. Se você implementar este método, você tem a responsabilidade de parar o serviço quando o trabalho é completado por stopSelf () ou método StopService (). |
onBind | Quando você deseja ligar os outros componentes e serviços através bindService (), o sistema chama o método. Se você implementar este método, você precisa voltar IBinder objeto para fornecer uma interface para os clientes para se comunicar com o serviço. Você deve implementar este método, se você não permitir a ligação, basta devolver nulo. |
onUnbind () | Quando uma interface do cliente para todos liberação especial de serviço de interrupção, o sistema chama o método. |
onRebind () | Quando uma nova conexão do cliente com o serviço, e depois de ter sido desligado por onUnbind (Intenção) notificação, o sistema chama o método. |
onCreate () | Quando os serviços através onStartCommand () e onBind () é criada pela primeira vez, o sistema chama o método. A chamada requer a implementação de uma instalação única. |
onDestroy () | Quando o serviço não é mais útil ou destruídos seja, o sistema chama o método. Seu serviço precisa implementar esse método para limpar todos os recursos, tais como fios, ouvintes registrados, receptores, e assim por diante. |
O seguinte serviço principal demonstra o ciclo de vida de cada método -
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() { } }
Exemplos
Este exemplo irá mostrar-lhe passos simples sobre como criar o seu próprio serviço de Android. Siga estes passos para modificar aplicação Android criado anteriormente na seção Exemplos Olá Mundo:
passo | descrição |
---|---|
1 | Usando Android Studio IDE para criar um aplicativo Android e androidservices nome no pacote cn.uprogrammer.androidservices. Exemplos semelhantes seção Olá Mundo. |
2 | Modificar o principal MainActivity.java arquivo ativo adicionar StartService () eo método StopService (). |
3 | Criar um novo MyService.java arquivo Java no cn.uprogrammer.androidservices pacote. Este arquivo vai tornar o Android um métodos relacionados ao serviço. |
4 | Para definir os serviços usam <service ... /> marca no arquivo AndroidManifest.xml. Um aplicativo pode ter um ou mais serviços, sem qualquer restrição. |
5 | Modificar res / layout arquivo / activity_main.xml no layout padrão, layout on-line contém dois botões. |
6 | Não res / valores / strings.xml apresentar quaisquer constantes a ser modificado. Estúdio Android vai notar o valor de cadeia. |
7 | Lançar emulador Android para executar o aplicativo e verificar os resultados das alterações feitas no aplicativo. |
Aqui é o principal arquivo de atividade conteúdo modificado arquivo src / cn.uprogrammer.androidservices / MainActivity.java. Este arquivo contém todos os princípios básicos de ciclo de vida. Nós adicionamos método StopService () StartService () e para iniciar e parar o serviço.
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)); } }
O seguinte é o conteúdo do src / cn.uprogrammer.androidservices / MyService.java de. Este arquivo pode implementar um ou mais serviços associados com o método baseado na demanda. Para os recém-chegados, que só percebem onStartCommand () e 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(); } }
Vamos modificar o arquivo AndroidManifest.xml. Aqui adicionar <service ... /> tag para incluir os nossos serviços:
<?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>
O seguinte é o conteúdo de res / layout arquivo / activity_main.xml contém dois botões:
<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>
Aqui está o conteúdo de res / valores / strings.xml é definir duas novas constantes:
<?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>
Vamos apenas executar um modificado Meu aplicativo Application. Presumo que você criou AVD durante o ambiente de instalação. Abra o projeto no arquivo ativo, clique na barra de ferramentas Ícone para executar o aplicativo no Android Studio. Estúdio Android instalar o aplicativo no AVD e inicia-lo. Se tudo correr bem, ele será exibido na janela do emulador da seguinte forma:
Agora clique no botão "Start Service" para iniciar o serviço, que irá executar onStartCommand escrevemos () método, um "serviço foi lançado" é exibida na parte inferior do simulador, como segue:
Clique na parte inferior do botão de "fora de serviço", você pode interromper o serviço.