美文网首页
android 初识service(一)

android 初识service(一)

作者: nade_s | 来源:发表于2020-06-17 17:03 被阅读0次

    熟悉android的朋友对service应该都不陌生了 今天我简单介绍一下service 希望可以帮助一下人更快捷的认识service
    从字面意思看 就是服务 运行于后台 (当然有需要的话也可以运行在前台,看需求)
    首先介绍一下service的生命周期
    1 onCreate() 在service 建立时调用
    2 onStartCommand() 在service被startService() 被调用
    3 onBind() 在service被绑定时被调用
    4 onDestroy() 当service被stopService()被调用
    这是一个简单的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(二)再来探讨
    每天都能进步一点点 大家共勉

    相关文章

      网友评论

          本文标题:android 初识service(一)

          本文链接:https://www.haomeiwen.com/subject/fwbsxktx.html