当前位置: 首页 > news >正文

个人网站备案需要什么网络营销推广方法十种

个人网站备案需要什么,网络营销推广方法十种,wordpress可以做相册吗,制作网站网页前言 之前我们在使 RESTful 访问服务端时,一般都是客户端请求服务端应答的方式,这种通讯方式,对于需要持续获取数据的情形都是采用轮询的方式,但是这种方式对两边的性能消耗很大,特别是服务端的压力很大。现在当我们使…

前言

之前我们在使 RESTful 访问服务端时,一般都是客户端请求服务端应答的方式,这种通讯方式,对于需要持续获取数据的情形都是采用轮询的方式,但是这种方式对两边的性能消耗很大,特别是服务端的压力很大。现在当我们使用WebSocket时,这类问题迎刃而解了。服务端可以根据需要向客户端实时推送消息。
WebSocket的协议很简单,客户端的onMessage事件可以很方便的接收消息。我们可以收到后传递给前端的Activity处理更新UI.

现代手机为了省电,屏幕在很短的时候就关闭了,但有时候我们不希望屏幕一灭,应用也跟着睡着了,手机息屏后,我们仍然希望用户能通过语音给用户传递信息。就像你切换屏幕了,高德能继续给你语音导航一样。这种情况单独使用Activity是无能为力的,Android系统设计为只要屏幕一灭,任何Activity的UI活动都会睡眠。不过,息屏后,后台的WebSocket客户端是能够继续接受消息的,但是没办法传到前端的活动了。这时候我们需要引入Android的Service来处理。
在讲解正文之前我们先回顾一下WebSocket的基本使用。

WebSocket与回调接口

在之前的文章中我们介绍了WebSocket的基本使用。就是利用OkHttp3的WebSocket相关功能搭建自己的调用程序框架。这里为了适应Service的使用,我们对WebSocket程序稍微加以改造一下。
首先我们将静态方法改造为实例方法,并使用单例模式。
其次,我们引入一个回调接口,这个很关键。
WebSocketListenerCallback

public interface WebSocketListenerCallback {void onDataReceived(String action, String data);void onFailure(String text);
}

它包含2个方法,
onDataReceived 处理收到消息后怎么办
onFailure 处理通讯失败

我们的WebSocket程序设计为可以设定多个Callback, 在onMessage 收到消息后,逐个执行每个Callback的onDataReceived方法。整个WebSocket程序的代码如下。使用前需要引入Okhttp3库。

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;import com.bob.app.C;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;public class WSClient {private static WSClient instance;private WebSocket socket;private final List<WebSocketListenerCallback> callbacks = new ArrayList<>();private final OkHttpClient client;private WSClient() {OkHttpClient.Builder cb = new OkHttpClient.Builder();cb.readTimeout(C.SOCKET_TIMEOUT, TimeUnit.SECONDS);cb.connectTimeout(C.SOCKET_TIMEOUT, TimeUnit.SECONDS);cb.writeTimeout(C.SOCKET_TIMEOUT, TimeUnit.SECONDS);client = cb.build();}public static synchronized WSClient getInstance() {if (instance == null) {instance = new WSClient();}return instance;}public synchronized void init() {Request request = new Request.Builder().url(C.serverUrl).build();WSListener listener = new WSListener();socket = client.newWebSocket(request, listener);}public void addCallback(WebSocketListenerCallback callback) {if (!callbacks.contains(callback)) {callbacks.add(callback);}}public void removeCallback(WebSocketListenerCallback callback) {callbacks.remove(callback);}public synchronized void send(String action, Object data) {long txNo = System.currentTimeMillis();String message = action + "$$" + txNo + "$$" + U.toJSONString(data);if (socket != null) {socket.send(message);}}public void disconnect(int code, String reason) {if (socket != null) {socket.close(code, reason);socket = null;}}private class WSListener extends WebSocketListener {@Overridepublic void onMessage(@NonNull WebSocket webSocket, @NonNull String text) {for (WebSocketListenerCallback callback : callbacks) {String[] str = text.split("\$\$");String action = str[0];//操作指令,String message = str.length > 2 ? str[2] : "";//信息正文callback.onDataReceived(action, message);}}@Overridepublic void onFailure(@NonNull WebSocket webSocket, @NonNull Throwable t, @Nullable Response response) {for (WebSocketListenerCallback callback : callbacks) {callback.onFailure("Error: " + t.getMessage());//错误信息传出去}}}
}

C是一个常数类,里面有些常数,比如SOCKET_TIMEOUT = 5;

Service接收推送消息

关于Service的基本使用,网上有很多资料。我们这里通过实际的场景应用来消化理解。

我们现在的应用场景就是:收到后台消息后,通过Service传递给前端应用,然后语音播报。
首先自己的Service继承基类,并且需要实现回调方法WebSocketListenerCallback
在初始化WebSocket的时候我们就把Callback传进去。并初始化。

整个Service的完整代码如下:

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;import com.bob.app.common.WSClient;
import com.bob.app.common.WebSocketListenerCallback;public class ActiveDataService extends Service implements WebSocketListenerCallback {@Overridepublic void onCreate() {super.onCreate();WSClient wsClient = WSClient.getInstance();//获取实例wsClient.addCallback(this);//传入CallbackwsClient.init();//执行初始化}public void onDataReceived(String action, String str) {if (A.ACTIVE_DATA.equals(action)) {//如果指令是推送新消息Intent intent = new Intent(BC.BROADCAST_ACTIVE_DATA);//收到最新实时消息intent.putExtra("data", str);LocalBroadcastManager.getInstance(this).sendBroadcast(intent);}}public void onFailure(String str) {Intent intent = new Intent(BC.BROADCAST_SERVER_OFFLINE);//服务端访问异常LocalBroadcastManager.getInstance(this).sendBroadcast(intent);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {startForeground(1, createNotification());return START_STICKY;}private Notification createNotification() {NotificationChannel channel = new NotificationChannel("channel", "Service", NotificationManager.IMPORTANCE_LOW);NotificationManager manager = getSystemService(NotificationManager.class);if (manager != null) {manager.createNotificationChannel(channel);}NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channel").setContentTitle(getString(R.string.app_name)).setContentText(getString(R.string.fetching_data)).setSmallIcon(android.R.drawable.ic_notification_overlay).setAutoCancel(true).setOngoing(false).setPriority(NotificationCompat.PRIORITY_DEFAULT);  // Make sure the priority is LOWreturn builder.build();}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onDestroy() {super.onDestroy();}
}

其中BC.BROADCAST_ACTIVE_DATA和BC.BROADCAST_SERVER_OFFLINE是2个常数字符串,可以自己取名字。

在Android里面,由于Activity和Service的生命周期并不相同,Service息屏后还能活动,因此Service并不能直接引用Activity也不能直接与Activity交互,只能通过广播间接交互。意思就是Service发送广播,Activity可以订阅后处理。上面的代码展示了怎样发送广播。

createNotification是一个常规方法,创建一个通知信息栏。这个会让用户知道一个后台服务在干嘛。有的手机会显示比如华为等,有的手机也默认不显示,比如Oppo等

Activity接收Service广播信息

Service发送的广播,Activity可以通过订阅的方式来使用。

具体的订阅方法如下:

 private final BroadcastReceiver receiver1 = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String data = intent.getStringExtra("data");finishGetActiveData(data);//接收到最新数据,传递到处理方法}};private final BroadcastReceiver receiver2 = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {showLogin();//接收到网络异常,退回到登录界面}};

先声明BroadcastReceiver, receiver的目的就是声明收到数据后怎么办。在onReceive方法里接收数据,然后传递到实现方法里面。这里我们声明了2个receiver,一个是收到正常的最新信息后怎么办。另一个是收到网络错误信息后怎么办。

然后在onCreate方法里注册receiver

Intent serviceIntent = new Intent(this, ActiveDataService.class);
ContextCompat.startForegroundService(this, serviceIntent);
LocalBroadcastManager.getInstance(this).registerReceiver(receiver1, new IntentFilter(BC.BROADCAST_ACTIVE_DATA));
LocalBroadcastManager.getInstance(this).registerReceiver(receiver2, new IntentFilter(BC.BROADCAST_SERVER_OFFLINE));

注意其中的 IntentFilter的用法,一般一个receiver只过滤接收一种消息。

这样我们就完成把消息传送给Activity这个数据链路了。

然后我们可以在finishGetActiveData方法里面干该干的事情了,比如调用TTS语音播报啥的。

看到这里,有的小伙伴可能会问,这个Callback我能不能在Activity里将WebSocket初始化,然后传入Callback呢,答案是可以的,可以将Activity实现WebSocketListenerCallback后传入WebSocket,也是一样的效果,还更简单,不用广播。不过前面我们讲过,这种直接使用Activity初始化WebSocket的程序只能在亮屏时功能正常,息屏了程序就跟着睡眠了。

另外,需要强调的一点时,要实现息屏后服务正常,需要手机在设置里关闭省电功能,并且允许应用后台活动。否则写了也白搭。只有用户才有最终决定权。

总结

要想息屏后,部分手机功能正常接收后台推送消息并传递给Activity处理,需要做如下处理:

- WebSocket引入回调接口并在onMesssge中调用。

- 创建一个Service实现回调接口,在回调方法中发送广播

- Activity中声明接收广播的receiver,并实现处理receiver收到的的数据。

http://www.shuangfujiaoyu.com/news/18952.html

相关文章:

  • 兴城做网站推广的百度官网认证价格
  • wordpress餐饮邯郸网站seo
  • 网站建设素材模板百度推广怎么样才有效果
  • 新疆建设工程信息网政采云网站优化包括
  • 崇仁网站建设推广费用百度资源分享网页
  • 青岛网站建设服务中心公司怎么在网上推广
  • 潍坊做网站维护费用百度网盘搜索引擎官方入口
  • 上海正规做网站公司电话新东方培训机构官网
  • 广州网页制作公司seo搜索排名优化方法
  • 做网站需要用到哪些编程知识app拉新任务平台
  • 邹城有做网站的吗抖音的商业营销手段
  • 太原网站seo顾问免费信息发布平台网站
  • 私人做网站百度下载免费安装
  • 重庆忠县网站建设公司哪里有seo公司 引擎
  • 腾讯公司主页seo网站推广助理招聘
  • 做网站避免上当关键词seo教程
  • 学做网站能找到工作么爱站网关键词挖掘
  • 宁津有培训做网站的百度公司简介介绍
  • 双语网站费用连云港seo公司
  • 网站做seo外包推广
  • admin登录网站seo优化中商品权重主要由什么决定
  • 第三方平台网站的建设规划互联网营销师培训课程
  • 学做网站网seo技术
  • 微型营销网站制作谷歌排名推广公司
  • 自己做的网站和ie不兼容什么是搜索推广
  • 深圳市建设局官方网站网站seo诊断优化方案
  • 威海做网站的公司有哪些官网首页入口百度
  • 网站制作完成需要进行哪些测试磁力屋torrentkitty
  • 河源做网站优化短链接在线生成器
  • 网站建设waoccseo商城