Android走进Framework之AppCompatActivity.setContentView

转载请标明出处: http://weyye.me/detail/framework-appcompatactivity-setcontentview/本文出自:【Wey Ye的博客】 前言在上一篇Android走进Framework之app是如何被启动的中讲到了从我们点击app一直到调用Activity.onCreate()的整个流程,今天来研究下我们最熟悉的一行代码setContentView()。网上也有很多关于setContentView的源码解析,但是都是基于Activity源码,而我们现在都是继承的AppCompatActivity,看源码发现改动还不少,所以我打算来研究下AppCompatActivity里是如何把我们的布局添加进去的。你是否也曾有过同样的疑惑,为什么创建Activity就要在onCreate()里面调用setContentView()?那就让我们来RTFSC (Read the fucking source code )。     继续阅读
Wey Ye's avatar
Wey Ye 3月 15, 2017
 | 

手撸一个今日头条视频下载器

前言今日头条是我最喜欢的app之一,当然喜欢并不是因为内容精彩,而是逗比的评论,而且看视频的没有广告,我这个人喜欢收藏,尤其是小视频(手动滑稽),可是却没有下载的按钮,之后在仿今日头条项目里也需要用到视频,进入网页右键另存为也比较麻烦,作为程序猿,这可不是我们的办事风格。于是动手撸了一个视频下载器,喜欢的记得给个Star,当作是给我的鼓励和动力吧。     继续阅读
Wey Ye's avatar
Wey Ye 2月 15, 2017
 | 

Android仿今日头条的开源项目

起因看到众多大神纷纷有了自己的开源项目,于是自己琢磨着也想做一个开源项目来学习下,因为每次无聊必刷的app就是今日头条,评论简直比内容都精彩,所以我打算仿今日头条来练练手,期间也曾放弃过,也遇到很多坑,拿出来跟大家分享一下。该项目使用的是MVP+RxJava+Retrofit。喜欢的记得给个Star,当作是给我的鼓励和动力吧。     继续阅读
Wey Ye's avatar
Wey Ye 2月 05, 2017
 | 

Android走进Framework之app是如何被启动的

转载请标明出处: http://www.weyye.me/detail/android-source-activity-oncreate/本文出自:【Wey Ye的博客】 前言 一个app的程序是怎么启动的?入口在哪里? 听说ActivityManagerServices很屌,Why? Activity生命周期到底是谁调用的? Application又是在哪里初始化的?onCreate又是如何被调用的? 面试官常常会问:为什么主线程使用looper.loop不会卡死界面? 等等.. 是不是一直有这样的疑问?很懵逼对不对 - - ,那我们就站在巨人的丁丁上来解决一下这些问题,如果文中出现一些错误,还望指正,互相学习     继续阅读
Wey Ye's avatar
Wey Ye 12月 26, 2016
 | 

说说使用腾讯地图sdk遇到的那些坑

前言之前做项目一直使用的高德地图,这次做的项目客户必须使用腾讯地图,然后又去折腾了下腾讯地图,说说我遇到的哪些bug Bug1:使用RxJava集成sdk报错由于先Rxjava比较火,为了赶上时代的脚步,现在做的这几个项目都用的是Rxjava,但是当我导入腾讯地图sdk后,却报了这个错 Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/rxjava.properties File1: E:\Android Project\YiBangKe\app\libs\TencentMapSDK_Vector_v3.0.4.jar File2: C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\io.reactivex\rxjava\1.1.1\b494968f6050d494de55dc3ce005e59c7eb40012\rxjava-1.1.1.jar     继续阅读
Wey Ye's avatar
Wey Ye 9月 28, 2016
 | 

Android破解高德地图sdk使用map免key

前言开发项目中,经常会使用到地图,于是我会使用一些第三方的sdk,但是基本上所有的sdk使用时都需要申请key,填包名和sha1值,使(Ji)用(Qi)方(Fan)便(Suo)。作为一个android攻城狮,简直不能忍啊,于是乎看了下源码,决定破解一下,演示使用的是高德地图,至于百度,呵呵,下面看我慢慢道来 所需工具 高德地图sdk最新版AMap_3DMap_V4.0.1_20160923.jar Android Studio jd-gui 分析代码在使用高德地图sdk的时候需要我们申请这个key,而这个key是需要我们提供包名和签名的sha1值生成的 因此 ,sdk在校验的时候肯定需要以下3个条件 签名的sha1值 包名 申请成功的key     继续阅读
Wey Ye's avatar
Wey Ye 9月 26, 2016
 | 

修改hosts进入google世界

前言自从google退出中国市场后,很多人使用百度搜索,但是作为程序员的我们,应该去使用google搜索,因为很多资料是百度搜索不到的,而且没有广告,毕竟墙外的世界是非常精彩滴。 如何科学上网 VPN: 这里不多做介绍 google浏览器插件:之前可以,现在很多插件都没和谐了 修改系统hosts: 这个是最简单粗暴的,而且速度又快,谁用谁知道 hosts下载地址 IP有一段的时效性,并不能保证能永久使用,我会持续更新最新的hosts的文件提供给大家 下载地址     继续阅读
Wey Ye's avatar
Wey Ye 9月 23, 2016
 | 

Android通用的EmptyLayout-展示不用状态的界面

前言在做项目的时候,经常会遇到列表数据为空的时候展示的空布局,如果你用的是ListView ,目测会经常使用ListView的一个方法setEmptyView ,如果你用的是RecyclerView,你也许会用自定义View来实现,但是,这些方法虽然使用起来简单,但是如果你提供一个复杂的布局,例如: 在数据加载失败后,添加一个Button让用户可以选择重新加载数据。 你肯定会说,findviewbyId找到这个button,给它设置点击事件,一个两个可以接受,但是,界面多了呢? 那你说了那么多,有没有好的解决办法呢? 当然有 而且是几行代码搞定的     继续阅读
Wey Ye's avatar
Wey Ye 8月 30, 2016
 | 

调用System.gc没有立即执行的解决方法

查看源码当我们调用System.gc()的时候,其实并不会马上进行垃圾回收,甚至不一定会执行垃圾回收,查看系统源码可以看到 /** * Indicates to the VM that it would be a good time to run the * garbage collector. Note that this is a hint only. There is no guarantee * that the garbage collector will actually be run. */ public static void gc() { boolean shouldRunGC; synchronized(lock) { shouldRunGC = justRanFinalization; if (shouldRunGC) { justRanFinalization = false; } else { runGC = true; } } if (shouldRunGC) { Runtime.getRuntime().gc(); } } 也就是justRanFinalization=true的时候才会执行     继续阅读
Wey Ye's avatar
Wey Ye 8月 29, 2016
 | 

Dialog样式的Activity-可以在任何地方弹出的Dialog

最近项目用到一个需求,当收到透传消息后不管在哪个界面都要弹出一个dialog,当时觉得这还不简单嘛,new一个呀 ,于是我就在receiver里面new了一个 然后就报了如下的错 android.view.WindowManager$BadTokenException: Unable to add window – token null is not for an applicationandroid.view.ViewRootImpl.setView(ViewRootImpl.java:567) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:269) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:323) at com.yipwey.dialogactivity.PushReceiver.onReceive(PushReceiver.java:16) at android.app.ActivityThread.handleReceiver(ActivityThread.java:2508) at android.app.ActivityThread.access$2000(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)     继续阅读
Wey Ye's avatar
Wey Ye 8月 12, 2016
 |