Android基礎知識:Service(3)啟動模式
廢話
今天我們來學習Service的啟動模式
Service的啟動模式有兩種
startService
bindService
startService
這種模式是啟動Service後,Service就會一直執行下去,直到程式被殺死,Service在被啟動後,就和啟動它的context沒有關係了,context不知道Service在幹什麼,當然,context還可以讓它停止,它也可以自己停止
下面就讓我們啟動一個Service
先建立一個Service
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
然後在主介面通過一個按鈕啟動Service
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,MyService.class);
startService(intent);
}
});
這樣,Service就啟動起來了
我們可以讓Service停止
Intent intent=new Intent(MainActivity.this,MyService.class);
stopService(intent);
也可以在Service自己停止
stopSelf();
bindService
這個方式啟動的Service可以和啟動它的context互動
下面我們來看看如何用bind方式啟動Service
我們首先在Service中建立一個自定義的內部類並定義兩個方法,然後在IBinder方法中返回自定義的內部類例項
MyService.java
public class MyService extends Service {
private int mData=0;
private MyBinder mMyBinder=new MyBinder();
class MyBinder extends Binder{
public void setData(int data){
mData=data;
}
public int getData(){
return mData;
}
}
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return mMyBinder;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
stopSelf();
}
}
接下來我們在MainActivity中進行如下修改
public class MainActivity extends AppCompatActivity {
private MyService.MyBinder myBinder;
private ServiceConnection connection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
myBinder=(MyService.MyBinder)iBinder;
myBinder.setData(1);
int data=myBinder.getData();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
};
private static final String TAG = MainActivity.class.getSimpleName();
private Button mBtn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
mBtn = (Button) findViewById(R.id.main_btn);
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,MyService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
}
});
}
}
這樣,我們就完成了Service的繫結
我們也可以解除繫結
unbindService(connection);
今天的學習就到這裡,晚安。
相關文章
- Android知識點回顧之Service基礎Android
- Android基礎知識Android
- centos系列的啟動流程及基礎知識點CentOS
- Android基礎知識學習Android
- Android應用基礎知識Android
- corejava基礎知識(3)-泛型Java泛型
- c語言基礎知識3C語言
- Service官方直譯深入理解(基礎知識完)
- Android View滑動相關的基礎知識點AndroidView
- 【Xamarin.Forms 2】App基礎知識與App啟動ORMAPP
- ASP.NET Core基礎知識(二)【應用啟動】ASP.NET
- 安卓(Android)開發基礎知識安卓Android
- Android 基礎知識——執行緒Android執行緒
- Android中的RecyclerView: 基礎知識AndroidView
- UI自動化基礎知識UI
- JS-陣列基礎知識3JS陣列
- Linux驅動入門基礎基礎知識Linux
- SAP SD基礎知識之銷售模式模式
- RxJava 知識梳理(3) RxJava2 基礎知識小結RxJava
- 基礎知識
- Java&Android 基礎知識梳理(3) 記憶體區域JavaAndroid記憶體
- Android面試之——數學基礎知識Android面試
- Android 動畫基礎知識學習(下)Android動畫
- MS(2):Android之基礎知識篇Android
- [android]轉發andorid基礎知識Android
- Android知識點複習2(Service)Android
- Python 必備面試基礎知識-3Python面試
- 【Python培訓基礎知識】單例模式Python單例模式
- AI 基礎知識AI
- Webpack 基礎知識Web
- Dart基礎知識Dart
- RabbitMQ基礎知識MQ
- webpack基礎知識Web
- javascript基礎知識JavaScript
- ThinkPHP基礎知識PHP
- Laravel基礎知識Laravel
- Redis基礎知識Redis
- Docker基礎知識Docker