小编Mer*_*ury的帖子

什么是停止作为前台运行的服务的正确方法

我正在尝试停止作为前台服务运行的服务.

目前的问题是,当我打电话时stopService(),通知仍然存在.

所以在我的解决方案中,我添加了一个我正在注册的接收器 onCreate()

onReceive()我调用的方法内部stopforeground(true),它隐藏了通知.然后stopself()停止服务.

onDestroy()我在里面注册了接收器.

有没有更合适的方法来处理这个?因为stopService()根本不起作用.

@Override
public void onDestroy(){
  unregisterReceiver(receiver);
  super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

android foreground-service

32
推荐指数
4
解决办法
2万
查看次数

Javascript中的const关键字范围

1. >>> const a = 2
2. >>> var a = 3
3. >>> a = 4
4. >>> a // print 2
Run Code Online (Sandbox Code Playgroud)

为什么允许操作线3?const似乎比没有任何关键字更"全局"......

javascript const

10
推荐指数
2
解决办法
9664
查看次数

如何将Firebase与基于Linux的客户端应用程序一起使用,以实现与服务器的双向消息通信

我已经在互联网上看到了Google的文档和大量关于如何在Android/iOS应用程序中使用Firebase的示例,但我想开发一个在Linux机器上运行的客户端Firebase应用程序.

我的要求是:

  • 客户端在linux环境下运行(在C++或python中使用writtern).
  • 服务器是用Javascript(NodeJS)编写的.
  • 服务器和客户端应使用firebase实时数据库在它们之间进行双向通信.

我也看过firebase REST api,但我认为这对我来说还不够好,因为我没有看到一个侦听类似的客户端监听器api onValueChanged.

题:

如何在C++或python中实现基于linux的应用程序,使用侦听器监听来自服务器的消息(数据更改),而不必get每隔几秒钟调用一些函数(就像NodeJS有ref.on("child_changed",...) 或者 ref.on("value",...)


帮助非常感谢!

c++ python firebase google-cloud-messaging firebase-cloud-messaging

10
推荐指数
1
解决办法
1018
查看次数

如何强制我的类的任何子类始终调用它们重写的父实现方法?

假设我有一个类,它实现了一个方法(addThings()).它作为子类树的基础:

ParentClass {
    protected void addThings() {
        map.add(thing1);
        map.add(thing2);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我们实现了一个子类(也有Thing 3),而Thing 3也需要添加在Thing 1和Thing 2之上.

显而易见的Java解决方案似乎是让子类的方法实现调用super的方法:

ChildClass extends ParentClass {
    protected void addThings() {
        super.addThings();
        map.add(thing3);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,实现子类的人可能会忘记这样做,并且有一个错误:

ChildClassBad extends ParentClass {
    protected void addThings() {
        // BUG!!! Forgot to call super.addThings(); !!!
        map.add(thing3); 
    }
}
Run Code Online (Sandbox Code Playgroud)

在Java中是否有一种方法可以强制任何扩展子(和孙子)类在它们覆盖它时总是调用父方法?(类似于如何使方法抽象总是迫使它们实现它).

  • 请注意,我需要在继承树下传播解决方案.

    换句话说,如果某人实现需要添加Thing4的GrandChildClass,他们将遭受与ChildClass相同的bug可能性.

    这意味着在ParentClass中具有单独的"addParentThings()"然后同时调用addParentThings()和child-overridable empty addThings()的简单修复(适用于只有1级继承时)是不够的(因为孙子必须覆盖非空的addThings).

java oop inheritance overriding design-patterns

6
推荐指数
2
解决办法
1036
查看次数

通过来自 JWT 令牌的解码值限制 NGINX 速率

我有一个关于 NGINX 速率限制的问题。

是否可以根据 JWT 令牌的解码值进行速率限制?我在文档中找不到任何这样的信息。

或者,即使有一种通过创建纯自定义变量(使用 LuaJIT)来限制速率的方法,该变量将从我解码的 JWT 中分配一个值 - 也可以完成这项工作。问题是limit_req模块似乎在请求到达 luaJIT 阶段之前执行,所以已经太晚了!

一个解决方案将不胜感激。

nginx rate-limiting luajit openresty

6
推荐指数
1
解决办法
830
查看次数

在自我维护的 Singleton 类中使用此关键字或始终使用实例

我正在实现一个可以维护自身的单例类,这意味着它有一个私有构造函数和一个 getInstance 方法

public class GPSTracker implements LocationListener {

  private static GPSTracker instance;
  private LocationManager locationManager;
  private field1, field2 ...;

  public static GPSTracker getInstance() {

        if(instance == null)
            instance = new GPSTracker();
        return instance;
    }

  ...
}
Run Code Online (Sandbox Code Playgroud)

问题1

由于此 GPSTracker 类维护其自己的单例对象(称为 instace),因此我在此类中实现的每个引用类字段/成员的方法是否都应该使用以下成员:this.field1 或始终instance.field1

问题2:(类似1)

正如您所看到的,在上面的示例中,我需要重写LocationListener 中的抽象方法,通常到目前为止,注册 GPS 的方式如下:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, this);
Run Code Online (Sandbox Code Playgroud)

由于我在同一个类中实现了覆盖,我是否也需要在这里使用instance单例对象(而不是这个)?

如果您能详细说明原因,我将不胜感激?

java singleton android this locationmanager

5
推荐指数
1
解决办法
875
查看次数

如何在 Amplify for Android 中将 Cognito 身份池与 UnAuthenticatd 用户一起使用

我一直在浏览 AWS Amplify文档和教程,了解如何与未经身份验证的用户一起使用 Amplify 和 Cognito 身份池。Amplify 文档给出的示例是:

Amplify.Auth.fetchAuthSession(
    result -> {
        AWSCognitoAuthSession cognitoAuthSession = (AWSCognitoAuthSession) result;
            switch(cognitoAuthSession.getIdentityId().getType()) {
                case SUCCESS:
                    Log.i("AuthQuickStart", "IdentityId: " + cognitoAuthSession.getIdentityId().getValue());
                    break;
                case FAILURE:
                    Log.i("AuthQuickStart", "IdentityId not present because: " + cognitoAuthSession.getIdentityId().getError().toString());
            }
        },
        error -> Log.e("AuthQuickStart", error.toString())
);
Run Code Online (Sandbox Code Playgroud)

但实际上,当我使用此代码时 - 我在 LogCat 中打印出一个错误:

AuthQuickStart: FAILURE IdentityId not present because: AmplifyException {message=You are currently signed out., cause=null, recoverySuggestion=Please sign in and reattempt the operation.}
Run Code Online (Sandbox Code Playgroud)

注意:我确实配置了 AWS Cognito 以支持未经身份验证的用户!

我还到处寻找 Amplify Android API 文档以查看支持哪些其他 …

android amazon-web-services amazon-cognito aws-amplify

5
推荐指数
1
解决办法
1373
查看次数