VUE开发--Service Worker(五十二)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUE开发--Service Worker(五十二)相关的知识,希望对你有一定的参考价值。

参考技术A W3C 组织早在 2014 年 5 月就提出过 Service Worker 这样的一个 html5 API ,主要用来做持久的离线缓存。
Service Worker 有以下功能和特性:

由于 Workers 与主线程分开运行,因此 Service Worker 独立于与其关联的应用程序。这将导致一下结果:
由于 Service Worker 没有阻塞(它被设计为完全异步),同步 XHR 和localStorage 不能在 Service Worker 中使用。
当应用程序处于没有活动状态时,Service Worker 可以从服务器接收推送消息。这可以让您的应用程序向用户显示推送通知,即使它未在浏览器中打开。

registration.scope 决定 Service Worker 可以控制哪些文件,换句话说 Service Worker 将从哪个路径拦截请求。默认的范围是 Service Worker 文件的位置,并扩展到以下所有目录。因此,如果 service-worker.js 位于根目录中,则服务工作人员将控制来自该域中所有文件的请求。
当然您还可以在注册时通过传入附加参数来设置任意范围。例如:

main.js

激活后,Service Worker 将控制加载在其范围内的所有页面,并开始监听来自这些页面的事件。但是,在 Service Worker 激活之前加载的页面不在 Service Worker 控制之下。当您关闭并重新打开您的应用程序时,或者 Service Worker 调用 clients.claim 时,新的 Service Worker 才会生效。在此之前,来自该页面的请求将不会被新的 Service Worker 拦截。这是可以保证您网站的一致性。

三、具体应用

有了 sw.js 之后就可以使用 workbox 了,你只需要在 sw.js 中导入 workbox 就可以使用了:

比较完整的 sw.js : https://wangdaodao.com/sw.js

workbox.strategies 对象为我们提供了几种最常用的策略:
Stale-While-Revalidate

Cache First

Cache Only

初学Android 创建 启动 停止Service 五十八

Service跟Windows系统里的服务概念差不多,都在后台执行,它跟Activity的最大区别就是,它是无界面

开发Service与开发Activity的步骤类似

1.定义一个继承Service的子类

2.在AndroidManifest.xml文件中配置该Service

Service与Activity还有一点相似之处,它们都是从Context派生出来的,因此它们都可调用Context里定义的如getResources(),getContentResolver()等方法

下面写一个简单的Service例子

先定义一个Service类

 

package WangLi.IO.FirstService;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class FirstService extends Service {
    //必须实现的方法
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

	//Service被创建时回调方法
	public void OnCreate()
	{
		super.onCreate();
		System.out.print("Service is Created");
	}
	
	//Service启动时回调该方法
	public int onStartCommand(Intent intent,int flags,int startId)
	{
		System.out.println("Service is Started");
		return START_STICKY;
	}
	
	//Service被关闭之前被回调
	public void onDestroy()
	{
		super.onDestroy();
		System.out.println("Service is Destroyed");
	}
}

上面几个关键方法都可以看到,Service的执行就在方法内写上相应的功能代码,在不同阶段执行

 

Service跟Activity一样,也需要在AndroidManifest.xml文件中注册,注册配置配置<intent-filter.../>子元素,设置Service可被哪些Intent启动

 

        <service android:name="FirstService" >
            <intent-filter>
                <action android:name="WangLi.IO.First_Service"></action>
            </intent-filter>
        </service>

建一个界面类Activity,放上两个按钮,一个用来启动Service,一个用来停止Service

 

 

package WangLi.IO.FirstService;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	Button start, stop;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取界面上的start,stop两个按钮
		start = (Button) findViewById(R.id.start);
		stop = (Button) findViewById(R.id.stop);
		// 创建启动Service的Intent
		final Intent intent = new Intent();
		// 为Intent设置Action属性
		intent.setAction("WangLi.IO.First_Service");
		start.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// 启动指定Service
				startService(intent);
			}
		});
		stop.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 停止指定Service
				stopService(intent);
			}
		});
	}
}

注意startService,和stopService这两个方法

 

下面是程序界面

技术分享图片

下面logcat记录的Service启动和关闭过程

技术分享图片

此外,有一点值得注意,多次启动一个已有的Service组件将不会再调用onCreate方法,但每次启动时都会回调onStart方法

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow




以上是关于VUE开发--Service Worker(五十二)的主要内容,如果未能解决你的问题,请参考以下文章

QT开发(五十二)———QML语言

@vue/cli-plugin-pwa 没有创建 service-worker.js

vue 中使用 Service Worker 遇到的问题

VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)

(转载)VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)

Android实战技巧之五十二:fastjson