import android.widget.Button,public class MainActivity extends AppCompatActivity (private static final String TAG ="HelloServiceActivity";Button startBtn,Button stopBtn;@Overrideprotected void onCreate(Bundle savedlnstanceState)super.onCreate(savedInstanceState),setContentView(R.layout.activity_main);startBtn = (Button)findViewByld(R.id.start);stopBtn = (Button)findViewById(R.id.stop);startBtn.setOnClickListener(newView.OnClickListener()public void onClick(View v) startService(newIntent(ServiceDemo.ACTION)););stopBtn.setOnClickListener(newView.OnClickListenerOpublic void onClick(Viewv)!stopService(newIntent(ServiceDemo.ACTION)):73);1@Overrideprotected void onDestroyO super.onDestroyO;3;16运行程序在Android实验箱上运行程序,观察和记录实验结果。14
14 import android.widget.Button; public class MainActivity extends AppCompatActivity { private static final String TAG = "HelloServiceActivity"; Button startBtn; Button stopBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startBtn = (Button)findViewById(R.id.start); stopBtn = (Button)findViewById(R.id.stop); startBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startService(new Intent(ServiceDemo.ACTION)); } }); stopBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopService(new Intent(ServiceDemo.ACTION)); } }); } @Override protected void onDestroy() { super.onDestroy(); }; } 6 运行程序 在 Android 实验箱上运行程序,观察和记录实验结果
单击“STARTSERVICE"按钮,启动非绑定的服务,“AndroidStudioAndroidMonitorlogcat"中运行结果如下图所示。其中:回调方法onCreateO在服务创建时调用,回调方法onStartCommandO在服务启动时调用,回调方法onStartO在服务运行时调用。BT BoxLab wS-SX-004shalnfogcatMionitorsRegex.ShowonlysSelected application6eaueastaMessagesSAndroidMonitor4RinTODChEventLopEGradleConsoTermi单击“STARTSERVICE"按钮,再次启动服务,“AndroidStudiolAndroidMonitorlogcat"中运行结果如下图所示。其中:因为服务已经创建,回调方法onCreate不再调用。saniaslogcatMonitontaRegodaniAE9HessagesSAndroidMonitorhRunEvent LogGradacoma单击“STOPSERVICE"按钮,停止服务,“AndroidStudioAndroidMonitor|logcat"中运行结果如下图所示。其中:回调方法onDestroyO在服务销毁时调用。-BoxLabws-sx-001 Androd 4.0.3APl15.com.example.helloservicelogrotVerRerePI1-09 11 : 02: 37.375 2079-2079/con.exatple.helloservice VorCestroPMessages4Andrcid MonitorPunToodhEventLogGe7修改ServiceDemo类修改ServiceDemo类(ServiceDemo.java)中代码如下,并如下图所示。packagecom.example.helloserviceimport android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log,publicclass ServiceDemoextends Serviceprivate static final String TAG = "ServiceDemo";public static final String ACTION ="com.example.helloservice.ServiceDemo";public ServiceDemoO7@Overridepublic void onCreateO Log.v(TAG,"ServiceDemo onCreate");super.onCreateO15
15 单击“START SERVICE”按钮,启动非绑定的服务,“Android Studio|Android Monitor|logcat”中 运行结果如下图所示。其中:回调方法 onCreate()在服务创建时调用,回调方法 onStartCommand()在服务启动时调用,回调方法 onStart()在服务运行时调用。 单击“START SERVICE”按钮,再次启动服务,“Android Studio|Android Monitor|logcat”中运行 结果如下图所示。其中:因为服务已经创建,回调方法 onCreate()不再调用。 单击“STOP SERVICE”按钮,停止服务,“Android Studio|Android Monitor|logcat”中运行结果 如下图所示。其中:回调方法 onDestroy()在服务销毁时调用。 7 修改 ServiceDemo 类 修改 ServiceDemo 类(ServiceDemo.java)中代码如下,并如下图所示。 package com.example.helloservice; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class ServiceDemo extends Service { private static final String TAG = "ServiceDemo" ; public static final String ACTION = "com.example.helloservice.ServiceDemo"; public ServiceDemo() { } @Override public void onCreate() { Log.v(TAG, "ServiceDemo onCreate"); super.onCreate();
1@Overridepublic void onStart(Intent intent, int startld) Log.v(TAG, "ServiceDemo onStart");1@Overridepublic int onStartCommand(Intent intent, int flags, int startid)Log.v(TAG,"ServiceDemoonStartCommand");return super.onStartCommand(intent, flags, startld);@Overridepublic IBinder onBind(Intent intent) :II TODO:Return the communication channel to the service/throw new UnsupportedOperationException("Not yet implemented");Log.v(TAG,"ServiceDemo onBind");return null;?@Overridepublic boolean onUnbind(Intent intent) Log.v(TAG,"ServiceDemo onUnbind");return super.onUnbind(intent);@Overridepublic void onDestroyO(Log.v(TAG, "ServiceDemo onDestroy");super.onDestroyO;18修改activity_main.xml文件双击AndroidStudio左侧app/src/main/res/layout/activitymain.xml文件,修改后的代码如下,16
16 } @Override public void onStart(Intent intent, int startId) { Log.v(TAG, "ServiceDemo onStart"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.v(TAG, "ServiceDemo onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. //throw new UnsupportedOperationException("Not yet implemented"); Log.v(TAG, "ServiceDemo onBind"); return null; } @Override public boolean onUnbind(Intent intent) { Log.v(TAG, "ServiceDemo onUnbind"); return super.onUnbind(intent); } @Override public void onDestroy() { Log.v(TAG, "ServiceDemo onDestroy"); super.onDestroy(); } } 8 修改 activity_main.xml 文件 双击 Android Studio 左侧 app/src/main/res/layout/activity_main.xml 文件,修改后的代码如下
并如下图所示。<?xmlversion="1.o"encoding="utf-8"?><LinearLayout xmlns:android="http:/schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layoutheight="matchparent"><Buttonandroid:id="@+id/start"android:layout_width="match_parent"android:layout_height-"wrap_content"android:text-"Start Service"/><Buttonandroid:id="@+id/stop"android:layout_width-"match_parent"android:layout_height="wrap_content"android:text-"Stop Service"<Buttonandroid:id="@+id/bind"android:layout_width="match parent"android:layout_height="wrap_content"android:text="Bind Service"<Buttonandroid:id="@+id/unbind"android:layout width-"match parent"android:layoutheight-"wrapcontent"android:text="Unbind Service"</LinearLayout>9修改MainActivity.java文件双击AndroidStudio左侧app/src/main/java/com.example.helloservice/MainActivity.java文件,17
17 并如下图所示。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/start" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Start Service" /> <Button android:id="@+id/stop" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Stop Service" /> <Button android:id="@+id/bind" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Bind Service" /> <Button android:id="@+id/unbind" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Unbind Service" /> </LinearLayout> 9 修改 MainActivity.java 文件 双击 Android Studio 左侧 app/src/main/java/com.example.helloservice/MainActivity.java 文件
修改后的代码如下,并如下图所示。package com.example.helloservice;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder,import android.support.v7.app.AppCompatActivity,import android.os.Bundle;import android.util.Log,import android.view.View,import android.widget.Button;public class MainActivity extends AppCompatActivityprivate static final String TAG ="HelloServiceActivity";Button startBtn;Button stopBtn,Button bindBtn;Button unbindBtn;private ServiceConnection conn=newServiceConnection()@Overridepublic void onServiceConnected(ComponentName name, IBinder service) Log.v(TAG,"onServiceConnected");@Overridepublic void onServiceDisconnected(ComponentName name)!Log.v(TAG,"onServiceDisconnected");3;@Overrideprotected void onCreate(Bundle savedlnstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity main);startBtn = (Button)findViewByld(R.id.start);stopBtn = (Button)findViewBylId(R.id.stop);bindBtn = (Button)findViewByld(R.id.bind);unbindBtn = (Button)findViewByld(R.id.unbind);startBtn.setOnClickListener(new View.OnClickListenerOpublic void onClick(View v) startService(newIntent(ServiceDemo.ACTION));13),stopBtn.setOnClickListener(new View.OnClickListenerO18
18 修改后的代码如下,并如下图所示。 package com.example.helloservice; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.IBinder; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private static final String TAG = "HelloServiceActivity"; Button startBtn; Button stopBtn; Button bindBtn; Button unbindBtn; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.v(TAG, "onServiceConnected"); } @Override public void onServiceDisconnected(ComponentName name) { Log.v(TAG, "onServiceDisconnected"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startBtn = (Button)findViewById(R.id.start); stopBtn = (Button)findViewById(R.id.stop); bindBtn = (Button)findViewById(R.id.bind); unbindBtn = (Button)findViewById(R.id.unbind); startBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { startService(new Intent(ServiceDemo.ACTION)); } }); stopBtn.setOnClickListener(new View.OnClickListener() {