Android基础学习--Service
- 作者: 夏娃夏娃
- 来源: 51数据库
- 2021-08-02
Android基础学习–Service
startService
首先,创建一个类MyService让它继承Service
/*
*1.服务只会被创建一次,可以通过外部调用的stopService或者自身的stopSelf来终止服务
*2.当执行一个已经启动的服务时,会直接调用onStartCommand方法来执行业务
* 3.默认情况下服务与主线程在同一个线程中执行,如果服务在执行一个比较耗时的操作,我们需要开启一个子线程来完成工作,避免阻塞主线程
* 4.若使用startService开启服务,在没有关闭的情况下会一直在后台运行
*/
public class MyService extends Service {
public MyService(){
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("onStartCommand -->" + i + "-- >" + Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 30){
MyService.this.stopSelf();
break;
}
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
}
其次,在配置文件中注册Service
<service android:name=".MyService"
android:exported="true"
android:enabled="true">
</service>
bindService
private MyBindService.IServiceControl binder;
//绑定服务的连接回调接口
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
binder = (MyBindService.IServiceControl) iBinder;
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
binder = null;
}
};
public void bindService(View v){
Intent intent = new Intent(MainActivity.this,MyBindService.class);
bindService(intent,connection, Context.BIND_AUTO_CREATE);
}
public void unbindService(View v){
if (connection != null){
unbindService(connection);
}
}
public class MyBindService extends Service {
public MyBindService(){
}
private class InnerBinder extends Binder implements IServiceControl{
public void callServiceInnerMethod(){
sayHello();
}
}
public interface IServiceControl {
void callServiceInnerMethod();
}
private void sayHello() {
Toast.makeText(this, "555", Toast.LENGTH_SHORT).show();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new InnerBinder();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("onStartCommand -->" + i + "-- >" + Thread.currentThread().getName());
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 30){
MyBindService.this.stopSelf();
break;
}
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}
}
推荐阅读
热点文章
android中Bitmap用法(显示,保存,缩放,旋转)实例分析
12
android 仿微信聊天气泡效果实现思路
1
Android的尺度,drawable-xxxxxxx
2
Codeforces Round #656 (Div. 3) (C、D题)
1
Android之handler异步消息处理机制解析
6
GridView中图片显示出现上下间距过大,左右图片显示类似瀑布流的问题
0
AsyncTask的简单使用
5
两个简单Fragment之间的通信(三种方式)
18
uboot修改设置boot参数命令
41
android中实现从相册中一次性获取多张图片与拍照,并将选中的图片显示出来
2
