发表于: 2018-12-23 20:58:08

0 949


一、今天完成的事情

使用前台服务

之前使用的服务都是在后台运行的,但服务的系统优先级是比较低的,当系统内存不足的情况时,就有可能回收掉正在后台运行的服务,如果希望服务可以一直保持运行状态,不会由于系统内存不足的原因导致被回收,可以考虑用前台服务,前台服务和普通服务最大的区别在于它会一直有一个正在运行的系统图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。

public class MyService extends Service{

......

@Override

public void onCreate() {

    super.onCrete();

    Intent intent = new Intent(this, MainActiivity.class);

    PadingIntent pi = PadingIntent.getActivity(this, 0, intent, 0);

    Notification notification = new NotificationCompat.Builder(this)

          .setContentTitle("This is content title")

          .setCntentText("This is content text")

          .setWhen(Systme.currentTimeMillis())

          .setSmallIcon(R.minimap.ic_launcher)

          .setLargeIcon(BitmapFactory.decodeResource(getResource), R.minimap.ic_launcher))

          .setContentIntent(pi)

          .build()

    startForeground(1, notification);

    }

    ......

}

这里创建了一个Notification,但并没有使用NotificationManager来将通知显示出来,而是调用了startForeground()方法后,这个方法接收两个参数,第一个是通知的id,第二个参数是Notification对象,调用strtForeground()方法后就会让service变成一个前台服务,并在系统状态栏显示出来。


Service的生命周期

服务的生命周期跟Activity的生命周期类似。但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行。

服务的生命周期---从创建到销毁---可以被分为以下两个路径:

1.  启动类型的服务: onCreate()- >onStartCommand()->Service running--调用context.stopService() ->onDestroy()

2.  绑定类型的服务: onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()

任何服务,不管它是怎样启动的,都可能允许客户绑定它,因此用onStartCommand()方法(通过一个客户端调用startService()方法)初始启动的服务,

依然能够接收onBind()的调用(在客户端调用bindService()方法时)。

建议启动服务的顺序,这样不会出现问题:

1. 开启服务  --- 保证服务一直后台运行

2. 绑定服务  --- 可以调用服务中的方法

3. 调用服务中的方法

4. 解绑服务  --- 这时服务依然后台运行

5. 停止服务


二、明天的计划

IM即时通讯,完成图片的发送和接收,长按消息弹出交互窗口


三、遇到的问题

四、收获

前台服务




返回列表 返回列表
评论

    分享到