android 初识service(一)

本文介绍了Android中Service的基本概念及使用方式,包括Service的生命周期、启动方式、与Activity之间的通信机制,以及如何创建前台Service。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

熟悉android的朋友对service应该都不陌生了 今天我简单介绍一下service 希望可以帮助一下人更快捷的认识service
从字面意思看 就是服务 运行于后台 (当然有需要的话也可以运行在前台,看需求)
首先介绍一下service的生命周期
1 onCreate() 在service 建立时调用
2 onStartCommand() 在service被startService() 被调用
3 onBind() 在service被绑定时被调用
4 onDestroy() 当service被stopService()被调用
这是一个简单的service
-# 创建service时 记住要在清单文件中声明 方可使用 #-

public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return my;
}

@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 高频活动的方法是 onStartCommand() 当service被创建后 再次调用 首先走得就是onStartCommand 而不是onCreate();
service 和activity 通信
是靠onbind(); 方法 一个service 可以被多个activity绑定 此时service 是不能杯关闭的 除非service 处于不被绑定状态时 才可以被销毁

service
public class MyService extends Service {
private MyBinder my = new MyBinder();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return my;
}

@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();
}

}
class MyBinder extends Binder{
public void toToast(final Context context){

  try {
      Thread.sleep(3000);
      Toast.makeText(context, "执行了", Toast.LENGTH_SHORT).show();
  } catch (InterruptedException e) {
      e.printStackTrace();
  }

}

}

activity

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private Button start;
private Button stop;
private Button bind;

ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        binder = (MyBinder) service;
        binder.toToast(MainActivity.this);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};
private MyBinder binder;
private Button unbind;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initview();
}

private void initview() {
    start = (Button) findViewById(R.id.start_service);
    stop = (Button) findViewById(R.id.stop_service);
    bind = (Button) findViewById(R.id.bind_service);
    unbind = (Button) findViewById(R.id.unbind_service);
    start.setOnClickListener(this);
    stop.setOnClickListener(this);
    bind.setOnClickListener(this);
    unbind.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.start_service:
            Intent starts= new Intent(this,MyService.class);
            startService(st);
            break;
        case R.id.stop_service:
            Intent stops = new Intent(this,MyService.class);
            stopService(stops);
            break;
        case R.id.bind_service:
            Intent binds = new Intent(this,MyService.class);
            bindService(binds,connection,BIND_AUTO_CREATE);
            break;
        case R.id.unbind_service:
            unbindService(connection);
            break;
    }
}

创建前台 service

可以自定义一个通知栏
在service 的 onCreate();
@Override
public void onCreate() {
super.onCreate();
Notification.Builder builder = new Notification.Builder(getApplicationContext());
builder.setSmallIcon(R.drawable.lamsejiahao);
builder.setTicker(“新消息”); // 通知提示
builder.setContentTitle(“第一个通知”); // 通知栏消息标题
builder.setContentText(“每天进步一点点”); // 通知栏消息内容
builder.setWhen(System.currentTimeMillis()); //发送时间
builder.setDefaults(Notification.DEFAULT_ALL);
Notification notification = builder.build();
NotificationManager notificationManager = (NotificationManager)getApplicationContext()
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(123, notification);
Log.d(TAG, “onCreate: 创建服务-自定义通知栏–”);
}
如果你需要执行一个下载任务 并显示进度 显然这样使用体验更好
好了 service (一 )到此结束 下次更新service(二)再来探讨
每天都能进步一点点 大家共勉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值