第九章 Service不可不知的事

一、Service的分类

◆  按所在进程

 Local:本地Service,即当前进程的Service;

 Remote:远程Service,指另外一个进程的Service;

 区别:本地Service依附在主进程上,一定程度上能够节约资源,且通讯比较方便。但如果主进程被杀掉了,该Service也会被杀掉;远程Service是一个独立的进程,它不受其他进程的影响,具有一定的灵活性。

◆  按展现方式

 前台服务:在通知栏一直显示,可以最大程度保证Service不被关闭,优先级比后台服务更高;

 后台服务

二、Android的通知 —— Notification

当某个应用程序希望向用户发出一些提示消息,而该应用程序又不在前台运行时,就可以借助通知来实现。通知可以在活动、广播和服务里创建,不过再活动里创建的情况比较少,因为只有当程序进入后台才会用到通知。
 public void onCreate() {
        super.onCreate();
       
        //创建NotificationManager来对通知进行管理
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        /**
         * 创建Notification对象
         第一个参数用于指定通知的图标,第二个参数用于指定通知的ticker内容,当通知被创建后,它会在状态栏一闪而过,属于一种瞬时的提示消息
         第三个参数指定通知被创建的时间
         */
        Notification notification = new Notification(R.drawable.img123,"我的音乐",System.currentTimeMillis());
        //跳转意图,当点击通知时跳转页面
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,new Intent(this,MainActivity.class),0);
        /**
         * 对通知的布局设定
         * 第二个参数指定通知的标题
         * 第三个参数指定通知的正文内容
         */
        notification.setLatestEventInfo(this,"title","content",pendingIntent);
        /**
         * 让通知显示出来
         * 第一个参数是id,要保证每个通知所指定的id都不同
         */
        notificationManager.notify(1,notification);
完成了通知栏的显示和点击事件后,一般我们要跳转到页面后状态栏自动消失,那怎么做呢?
在跳转页面的onCreate方法中,添加取消通知的代码:
public class NotificationActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
	
		super.onCreate(savedInstanceState);
		setContentView(R.layout.notification_layout);
		NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
		manager.cancel(1);
	}
}


三、使用service的注意事项

1.  service是在主线程中的,所以不能进行耗时操作;
2. 当旋转手机屏幕,竖屏变横屏时,activity是重新创建的,所以service的binder和activity会自动断开;
3. 在service中创建子线程和在activity中创建子线程的区别:
        在activity中创建子线程,当activity被销毁时,就无法获取之前创建的子线程的实例了。而且在activity中创建的子线程是无法供其他activity进行操作的;而service就不一样了,所有的activity都可以和它进行关联,即使activity销毁了,也可以执行这个子线程;

拾遗:

1. context——上下文,可以这么理解:每一段代码都有很多外部变量。一旦你的程序有了外部变量,这段程序就不能独立运行,就要把所有外部变量的值一个一个写进去,这些外部变量的总和叫做上下文。即运行环境。
2. 想要知道所在线程是在哪个线程中,可以用log把当前线程打出来:
Log.d(TAG , "Activity thread id:" + Thread.currentThread().getId());


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值