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(五十二)的主要内容,如果未能解决你的问题,请参考以下文章
@vue/cli-plugin-pwa 没有创建 service-worker.js
VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)