关于使用 FLAG_HOMEKEY_DISPATCHED 标志在应用层截获 HOME 按键的说明

有些时候,需要在应用里截获 HOME 按键,比如产线上的按键测试软件。

目前网上有一种解决方法如下:
public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);

然后,再重写按键相关的事件即可。是不是很简单?

不过,如果你仔细看源码的话,会发现 WindowManager.java 中不一定有 FLAG_HOMEKEY_DISPATCHED 这个常量。
这究竟是怎么回事呢。

我初次在网上看到这个修改方式时,没太在意,但后来发现到处在引用,就不得不说说了。
FLAG_HOMEKEY_DISPATCHED 这个常量最初是我在做某个项目的时候,为了测试 HOME 键添加的。
首先要做的就是修改 Framework 层的代码,然后应用层再通过上述方式通知 FW 层我要使用 HOME 键。
不知道哪位大神将应用上的修改放到网上,可是不知道背后是需要 Framework 的修改做支撑的。

好了,到这里大家应该清楚了,这个方法如果有效,需要在这个特定项目或后续项目的代码下才可以。
否则,还是老老实实地去在修改源码上找方法吧。
如果您是做第三方应用的,那么好吧,在现在的版本上,只在应用上解决已经不可能了。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 Zookeeper是Google的Chubby一个开源的实现。是高有效和可靠的协同工作系统。Zookeeper能够用来leader选举,配置信息维护等。在一个分布式的环境中,我们需要一个Master实例或存储一些配置信息,确保文件写入的一致性等。Zookeeper能够保证如下3点: 1、Watches are ordered with respect to other events,other watches,and asynchronous replies. The ZooKeeper client libraries ensures that everything is dispatched in order. 2、A client will see a watch event for a znode it is watching before seeing the new data that corresponds to that znode. 3、The order of watch events from ZooKeeper corresponds to the order of the updates as seen by the ZooKeeper service. 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当这个创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里。Zookeeper使用Watcher察觉事件信息,当客户端接收到事件信息,比如连接超时,节点数据改变,子节点改变,可以调用相应的行为来处理数据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。 那么Zookeeper能帮我们作什么事情呢?简单的例子:假设我们我们有个20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个 总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器现在提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在 提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以搜索提供服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,备用的总服务器宕机时自动启用备用的总服务器,web的cgi能够自动地获知总服务器的网络地址变化。这些又如何做到呢? 1、提供搜索引擎的服务器都在Zookeeper中创建znode,zk.create("/search/nodes/node1", "hostname".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateFlags.EPHEMERAL); 2、总服务器可以从Zookeeper中获取一个znode的子节点的列表,zk.getChildren("/search/nodes",true); 3、总服务器遍历这些子节点,并获取子节点的数据生成提供搜索引擎的服务器列表; 4、当总服务器接收到子节点改变的事件信息,重新返回第二步; 5、总服务器在Zookeeper中创建节点,zk.create("/search/master","hostname".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateFlags.EPHEMERAL); 6、备用的总服务器监控Zookeeper中的"/search/master"节点.当这个znode的节点数据改变时,把自己启动变成总服务器,并把自己的网络地址数据放进这个节点; 7、web的cgi从Zookeeper中"/search/master"节点获取总服务器的网络地址数据并向其发送搜索请求; 8、web的cgi监控Zookeeper中的"/search/master"节点,当这个znode的节点数据改变时,从这个节点获取总服务器的网络地址数据,并改变当前的总服务器的网络地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值