1.创建服务
Exported:是否允许除了当前程序之外的其他程序访问这个服务
Enable:是否启用这个服务
点击完成后自动生成
import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyService extends Service { public MyService() { } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } }
onBind 是Service唯一的抽象方法。
创建完成后会在AndroidManifest.xml中自动进行注册
<service android:name=".MyService" android:enabled="true" android:exported="true"></service>
2.开关服务
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void startClick(View view){ Intent startIntent=new Intent(this,MyService.class); //启动服务 startService(startIntent); } public void stopClick(View view){ Intent startIntent=new Intent(this,MyService.class); //关闭服务 stopService(startIntent); } }
界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动服务" android:onClick="startClick" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止服务" android:onClick="stopClick" /> </LinearLayout>
点击启动服务按钮,在手机系统里可以发现多出一个服务名,
即使关闭程序,服务也不会停止。直到点击停止服务按钮,或者卸载了该程序。
3.
public class MyService extends Service { public MyService() { } @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } //服务创建时调用 @Override public void onCreate() { super.onCreate(); Log.d("MyService","执行了onCreate方法"); } //服务每次启动时调用 @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("MyService","执行了onStartCommand方法"); return super.onStartCommand(intent, flags, startId); } //服务销毁时调用 @Override public void onDestroy() { Log.d("MyService","执行了onDestroy方法"); super.onDestroy(); } }
第一次点击启动服务
再次点击启动服务
点击停止服务
4.关联活动与服务
添加两个按钮
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="绑定服务" android:onClick="bind" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消绑定" android:onClick="unBind" />
MyService
public class MyService extends Service { private Download dlBinder =new Download(); class Download extends Binder{ public void startDownload(){ Log.d("MyService","开始下载"); } public int getProgress(){ Log.d("MyService","得到进度"); return 0; } } @Override public IBinder onBind(Intent intent) { return dlBinder; }
MainActivity
public class MainActivity extends AppCompatActivity { private MyService.Download dlBinder; //匿名类 private ServiceConnection connection =new ServiceConnection() { //活动与服务成功绑定时调用 @Override public void onServiceConnected(ComponentName name, IBinder service) { // dlBinder=(MyService.Download)service; dlBinder.startDownload(); dlBinder.getProgress(); } //活动与服务解除绑定时调用 @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void bind(View view){ Intent bindIntent=new Intent(this,MyService.class); //绑定服务 bindService(bindIntent,connection,BIND_AUTO_CREATE); } public void unBind(View view){ Intent unBindIntent=new Intent(this,MyService.class); //解绑服务 unbindService(connection); }
}
点击 绑定服务
点击取消绑定