240 发简信
IP属地:广东
  • @Demon2004 我从来没说过对第三方库宽容,我只是说就实现这个功能而言,如果第三方库直接有Activity可以用了,岂不是要配合你?例如ZXing的android包,就自带了一个扫码的Activity,我懒得搞直接用还不行?如果我只是做扫码功能,只能作出两个选择,重做一个activity去继承你那个,要么直接改ZXing的源码。

    针对Java,OOP是有局限性的,例如C++的静多态,就不依赖继承来实现。而且继承缺点很多,不利于封装,因为你这样做会导致一溜子类依赖父类(特别是android app一大票的activity)行为。更多的就不多说了,毕竟都是说到烂的话题。

    android的Activity类,为什么必须继承来使用,如果仅仅占在复用角度上去说,是说不过去的(毕竟显示个hello world是不需要理会你说的什么onCreate之类的,其他GUI系统,能直接new的多了去了,这说明设计者的意图是让你去干一些重要的事情),如果只是代码复用,那么默认的Application类就是做好的例子。所以,我觉得这些恰好是反对你说法的最好的例子。

    一般来说,大部分OS都会提供监听器来监听各种组件的生命周期,所以我也给出解决方案,那就是继承Application,通过ActivityLifecycleCallbacks来监听全部Activity的显示和销毁,虽然需要继承实现,但危害相对较轻(毕竟Application就只有一个,功能还简单,而Acivity却有N个),而且问题比较少。那反过来你仔细想想,ActivityLifecycleCallbacks为啥是成员,而不是父类方法,这样做,我还少写代码呢,你说是吧?至于OOP那些乱七八糟的名词,很多书都讨论到烂了,能找到更好的路子,就上更好的,不是非必须的继承(或者错误的继承),通常是灾难的开端。

    说说在 Android 中如何实现强制下线功能

    在应用程序中的一个常见功能是 “强制下线”。比如 QQ 号在别处登录后,就会把当前的 QQ 号挤下线。实现思路是:在界面上弹出一个对话框,让用户无法进行任何其他操作,只能点击...

  • @Demon2004 如果你不用多态,继承那个基类有什么意义?大部分情况下继承都不是代码复用的最优解,和谁用没关系,这些问题,在Effective Java之类的书都有讲解的。

    我说的是你用别人的库,而不是别人用你的库,例如别人的AAR里面有个Activity,这种方法是显然做不到的。

    说说在 Android 中如何实现强制下线功能

    在应用程序中的一个常见功能是 “强制下线”。比如 QQ 号在别处登录后,就会把当前的 QQ 号挤下线。实现思路是:在界面上弹出一个对话框,让用户无法进行任何其他操作,只能点击...

  • @wangziy 你也可以换条曲线,之前输出里面有的

    Java密码学 非对称加密以及使用secp256k1进行数字签名(ECDSA),也适合Android(上)

    1. 概述 我们考虑几个现实中的业务场景: 案例一: 当更新Android手机上的微信APP,系统怎么判断新的安装包就是腾讯公司发布的安装包?系统怎么判断即使是腾讯发布的安装...

  • @wangziy 没关系,在实际业务中你要验证服务器过来的数据或者文件的数字签名,公钥和私钥都是预先产生的(并且很少会改动)。上面生产公钥和私钥的代码,你可以现在PC上跑一下(或者用Openssl生成一下),产生的公钥文件,直接内置到APP的assets中(泄露也没关系),私钥放在服务器上防止泄露。服务器生产的数据/文件用私钥签名一下,APP端用内置的公钥验签一下就行了。上面生成秘钥的代码,只是我在PC上测试使用的,而APP只用验签代码,服务器和APP公用部分代码。

    Java密码学 非对称加密以及使用secp256k1进行数字签名(ECDSA),也适合Android(上)

    1. 概述 我们考虑几个现实中的业务场景: 案例一: 当更新Android手机上的微信APP,系统怎么判断新的安装包就是腾讯公司发布的安装包?系统怎么判断即使是腾讯发布的安装...

  • @wangziy 从错误来看,是厂商把对应的曲线给精简了。你可以试试以下代码是否能输出:secp256k1字样

    java.security.Provider[] providers = java.security.Security
    .getProviders();

    for (java.security.Provider p : providers) {
    Set<java.security.Provider.Service> services = p.getServices();
    for (java.security.Provider.Service service : services) {
    System.out.println(service);
    }

    }

    我试过几台android手机,都是没问题的

    Java密码学 非对称加密以及使用secp256k1进行数字签名(ECDSA),也适合Android(上)

    1. 概述 我们考虑几个现实中的业务场景: 案例一: 当更新Android手机上的微信APP,系统怎么判断新的安装包就是腾讯公司发布的安装包?系统怎么判断即使是腾讯发布的安装...

  • 不需要写BaseActivity和Activities两个类,这样对其他对象侵入比较大,万一不用你的BaseActivity呢?或者调用第三方库弹出来的Activity呢?

    最简单的办法就是继承Application,然后registerActivityLifecycleCallbacks来监听Activity的生命周期。

    说说在 Android 中如何实现强制下线功能

    在应用程序中的一个常见功能是 “强制下线”。比如 QQ 号在别处登录后,就会把当前的 QQ 号挤下线。实现思路是:在界面上弹出一个对话框,让用户无法进行任何其他操作,只能点击...

  • 一个保存数据后掉电丢失数据的BUG

    概述 我从事的产品,是面向行业的Android应用,同时硬件也是自己开发的。因为属于工程产品以及一些因素,并没有设计电池,因此这里就一个很大的问题,掉电可能会导致数据丢失、甚...

  • 120
    智能门禁/对讲的一次性密码开门实现

    1. 概述 现在很多小区都有一些企业免费更换新的门禁、对讲(这个就是前一、两年搞的风风火火的智慧社区、社区O2O等),这些门禁、对讲有一个很重要的特色就是可以使用手机开门、对...

  • 120
    使用Android Studio和CMake进行NDK开发 - 模块划分与管理

    1. 概述 如果工程代码比较小,所有的C/C++代码放在一个CMake模块里问题不大。但是随着功能的增加,可能会拆分模块来管理,例如一个加密模块、一个音频处理模块。或者为了便...

  • Java密码学 非对称加密以及使用secp256k1进行数字签名(ECDSA),也适合Android(下)

    1. 概述 上篇讲述了秘钥的生成、存储和加载,这篇的内容就是如何生成和校验数字签名。 2. Signature类 在Java中,签名和校验,都是通过: Signature 类...

  • Java密码学 非对称加密以及使用secp256k1进行数字签名(ECDSA),也适合Android(上)

    1. 概述 我们考虑几个现实中的业务场景: 案例一: 当更新Android手机上的微信APP,系统怎么判断新的安装包就是腾讯公司发布的安装包?系统怎么判断即使是腾讯发布的安装...

  • 二进制转文本方案

    概述 在开发当中,会经常遇到二进制数据转文本的需求,常见的应用场景如下: 需要打印的时候 例如打印到屏幕,在调试器、数据包分析等场合经常会遇到 跨应用交互 例如需要在两个无关...

  • @归海一翔 我用的是WIN10的WSL,实际上能和WIN32程序互操作了,文件也是直接访问的。基于官方的makefile来编译是最省时省力的做法。可以你先编译出静态库或者动态库,然后就可以在windows上直接使用了(详见测试APP那块),不需要再次编译。

    OpenSSL实践-Android下的编译和使用

    1. 概述 openssl可以编译成ARM下面的二进制代码(动态库或者静态库),方便APP使用,APP在使用的时候,需要使用JNI来进行调用。 官方WIKI有写如何为andr...

  • @wiket 好,谢谢。

    OpenSSL实践-Android下的编译和使用

    1. 概述 openssl可以编译成ARM下面的二进制代码(动态库或者静态库),方便APP使用,APP在使用的时候,需要使用JNI来进行调用。 官方WIKI有写如何为andr...