Android课程---关于Service的学习(后台运行)
MainActivity.java
package com.hanqi.test2; import android.content.ComponentName; import android.content.Context; 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.Toast; public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //一般方式启动Service //参考Activity 的启动方式 public void bt1_onclick(View v) { //通过意图Intent //显式意图 Intent intent = new Intent(this,TestService1.class); startService(intent); Toast.makeText(MainActivity.this, "启动Service", Toast.LENGTH_SHORT).show(); } public void bt2_onclick(View v) { //通过意图Intent //显式意图 Intent intent = new Intent(this,TestService1.class); stopService(intent); Toast.makeText(MainActivity.this, "停止Service", Toast.LENGTH_SHORT).show(); } ServiceConnection sc; public void bt3_onclick(View v) { //通过意图Intent //显式意图 Intent intent = new Intent(this,TestService1.class); if (sc == null) { sc = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.e("TAG", "连接服务"); } @Override public void onServiceDisconnected(ComponentName name) { Log.e("TAG", "断开连接服务"); } }; } //参数:意图,连接,绑定方式 BIND_AUTO_CREATE:自动创建 bindService(intent,sc, Context.BIND_AUTO_CREATE); Toast.makeText(MainActivity.this, "绑定服务成功", Toast.LENGTH_SHORT).show(); } public void bt4_onclick(View v) { //判断是否已经绑定,连接是否为空 if (sc != null) { //解除绑定 unbindService(sc); sc = null; Toast.makeText(MainActivity.this, "解除绑定", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "尚未绑定", Toast.LENGTH_SHORT).show(); } } @Override protected void onDestroy() { if (sc != null) { //解除绑定 unbindService(sc); sc = null; } super.onDestroy(); } }
TestService1.java
package com.hanqi.test2; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; public class TestService1 extends Service { public TestService1() { Log.e("TAG","构造Service"); } //绑定的回调方法 //必须要重写 @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. //throw new UnsupportedOperationException("Not yet implemented"); Log.e("TAG","绑定被调用"); return new Binder(); } @Override public void onCreate() { Log.e("TAG","创建Service"); super.onCreate(); } @Override public void onDestroy() { Log.e("TAG","销毁Service"); super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e("TAG","启动命令"); return super.onStartCommand(intent, flags, startId); } @Override public boolean onUnbind(Intent intent) { Log.e("TAG","解除绑定"); return super.onUnbind(intent); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.hanqi.test2.MainActivity" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="一般启动服务" android:onClick="bt1_onclick"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="一般停止服务" android:onClick="bt2_onclick"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="绑定启动服务" android:onClick="bt3_onclick"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="解绑停止服务" android:onClick="bt4_onclick"/> </LinearLayout> </LinearLayout>
效果图: