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

网上商城建站服务商长沙知名网站建设

网上商城建站服务商,长沙知名网站建设,临沂百度推广的电话,贵阳软件开发公司在哪里版权声明#xff1a;本文为xing_star原创文章#xff0c;转载请注明出处#xff01; 本文同步自http://javaexception.com/archives/113 Android开发利器之ActivityTracker 今天在群里面划水#xff0c;有个小伙伴问到一个问题#xff0c;”刚进公司 清单文件的activity 较…版权声明本文为xing_star原创文章转载请注明出处 本文同步自http://javaexception.com/archives/113 Android开发利器之ActivityTracker 今天在群里面划水有个小伙伴问到一个问题”刚进公司 清单文件的activity 较多 不便于查找和定位有什么办法解决”。这个问题我自认为还是很有经验的向对方推荐了一个ActivityTracker软件这个软件的作用嘛就是开启了一个悬浮窗会显示当前页面的Activity的名称无论是系统App还是新接手的公司App通过展示的Activity类名能够很容易的找到这块业务逻辑的代码所在。这个小工具真的很可以提高开发效率所以准备记录下来这个东西也是用了好几年了不是今天有人问到也不会有想法特意写篇文章记录下ActivityTracker。 源码分析 这个小工具在Github上是开源的地址是https://github.com/fashare2015/ActivityTracker也有幸提过pr代码量上就四五个类很容易看懂的。本质上采用的是Android的AccessibilityService这个辅助服务机制时刻检测屏幕对应的Activity同时在Service中用WindowManager显示悬浮view。 具体到代码层面当用户开启辅助服务后TrackerService被激活onAccessibilityEvent方法就会不断的被执行 Override public void onAccessibilityEvent(AccessibilityEvent event) {Log.d(TAG, onAccessibilityEvent: event.getPackageName());if (event.getEventType() AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {CharSequence packageName event.getPackageName();CharSequence className event.getClassName();if (!TextUtils.isEmpty(packageName) !TextUtils.isEmpty(className)) {EventBus.getDefault().post(new ActivityChangedEvent(event.getPackageName().toString(),event.getClassName().toString()));}} } 当onAcessibilityEvent被触发后满足TYPE_WINDOW_STATE_CHANGED用来表示Window窗口发生了变化条件后通过EventBus将当前页面的包名Activity类名传递到FloatingView中接着就在FloatingView中刷新对应的包名类名值。 public void onEventMainThread(TrackerService.ActivityChangedEvent event){Log.d(TAG, event: event.getPackageName() : event.getClassName());String packageName event.getPackageName(),className event.getClassName();mTvPackageName.setText(packageName);mTvClassName.setText(className.startsWith(packageName)?className.substring(packageName.length()):className);Log.d(TAG, event: event.getPackageName() : event.getClassName() , end invoked!); } 这块是核心逻辑。 FloatingView是如何在Service中显示隐藏的呢可以看到TrackerService里面有个成员变量mTrackerWindowManager他用来控制显示隐藏FloatingView。 TrackerWindowManager的静态代码块设置了悬浮view的默认显示位置以及可以接受手势触摸 static {WindowManager.LayoutParams params new WindowManager.LayoutParams();params.x 0;params.y 0;params.width WindowManager.LayoutParams.WRAP_CONTENT;params.height WindowManager.LayoutParams.WRAP_CONTENT;params.gravity Gravity.LEFT | Gravity.TOP;params.type WindowManager.LayoutParams.TYPE_PHONE;params.format PixelFormat.RGBA_8888;params.flags WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;LAYOUT_PARAMS params; } public void addView() {if(mFloatingView null){mFloatingView new FloatingView(mContext);mFloatingView.setLayoutParams(LAYOUT_PARAMS);mWindowManager.addView(mFloatingView, LAYOUT_PARAMS);} } addView方法就是将FloatingView添加到Service的WindowManager中并显示出来这块需要对WindowManager有所理解了解其用法。 在我们真正使用的过程中会发现ActivityTracker明明Activity页面已经finish了但是悬浮view依旧显示在当前的屏幕上控制悬浮view显示的是WindowManager而这个windowManager在Service中存活着。所以基本上就会一直显示着很少会被系统杀死。 分析完后发现这个小工具并不难主要用到的就是AccessibilityServiceWindowManager添加FloatingView,以及EventBus。相信大家都可以实现这个小工具。 项目地址 https://github.com/fashare2015/ActivityTracker转载于:https://www.cnblogs.com/xing-star/p/10962004.html
http://www.pierceye.com/news/648472/

相关文章:

  • 门户网站 源码网站建设推广公司范围
  • 网站字体大小wordpress用户登录页面
  • 影院禁止18岁以下观众入内宿迁新站seo
  • 龙岗网站设计机构网站开发开始阶段的主要任务包括( )。
  • 宿州公司网站建设教做世界美食的网站
  • 网站建设价格很 好乐云seo免费自学编程
  • 网站哪家做的好公共资源交易中心级别
  • html5网站开发工具自己做微信电影网站怎么做
  • 学院网站制度建设成品大香伊煮蕉免费在线
  • 做网站的域名和空间是什么意思佛山建站专
  • 网站是哪个公司做wordpress 底部修改插件
  • 嘉兴网站推广优化印度vps
  • 网站seo诊断分析和优化方案青岛网站制作方案
  • 发布个人免费网站的一般流程图宣传广告
  • php学什么可以做网站po wordpress
  • 875网站建设怎么样网站设计高端网站设计
  • qq钓鱼网站怎么制作扬州网站建设哪个好薇
  • 域名和网站空间怎么做解析南阳seo网站推广费用
  • 烟台企业网站建设国内ui网站有哪些
  • 手机网站建设选 朗创营销电商运营的核心公式
  • seo网站排名软件飞机网页设计实训报告
  • 禹城做网站做网站的教科书
  • 基木鱼建站公众号怎么做网站
  • 无水印做海报的网站百度技术培训中心
  • 如何在阿里云上做网站现在最流行的网站开发工具
  • 济宁网站建设联系方式漳州本地网
  • 口腔网站建设wordpress顶部提示
  • 葫芦岛做网站公司如皋网站开发公司
  • 国外开源 企业网站服务好质量好的网站制作
  • sql网站的发布流程品牌建设是什么意思