Android基础学习--Service
程序员文章站
2022-03-21 13:17:12
Android基础学习–Service首先,创建一个类MyService让它继承Service/**1.服务只会被创建一次,可以通过外部调用的stopService或者自身的stopSelf来终止服务*2.当执行一个已经启动的服务时,会直接调用onStartCommand方法来执行业务* 3.默认情况下服务与主线程在同一个线程中执行,如果服务在执行一个比较耗时的操作,我们需要开启一个子线程来完成工作,避免阻塞主线程* 4.若使用startService开启服务,在没有关闭的情况下会一直在后台运行...
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);
}
}
本文地址:https://blog.csdn.net/weixin_44388411/article/details/108579963
上一篇: 安卓10外部存储的访问
下一篇: 小米11京东现货:3999元极具竞争力