<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fg607的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fg607</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fg607]]></copyright><item><title><![CDATA[Java序列化中transient修饰符的作用]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/70788187</link><guid>https://blog.youkuaiyun.com/fg607/article/details/70788187</guid><author>fg607</author><pubDate>Wed, 26 Apr 2017 10:42:16 +0800</pubDate><description><![CDATA[“使用网络传输对象时需要将对象进行序列化，但在某些情况下，需要序列化的对象持有其他对象的引用，出于安全考虑，我们不希望某些对象被序列化，此时就可以使用transient修饰符 标注不被反序列化对象。”]]></description><category></category></item><item><title><![CDATA[关于Drawable资源被用在多个地方显示图片时，改变其中一个实例的状态会同时作用到其他实例的解决方法]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/70474133</link><guid>https://blog.youkuaiyun.com/fg607/article/details/70474133</guid><author>fg607</author><pubDate>Sat, 22 Apr 2017 19:49:16 +0800</pubDate><description><![CDATA[在做项目的过程中发现了一个很奇怪的现象，相同的代码在两个应用中产生了不同的效果。代码具体内容是使用应用中的同一个Drawable资源创建了几个不同的ImageView实例，改变其中一个ImageView的背景透明度。img1.setBackground(getResources().getDrawable(R.drawable.theme));img2.setBackground(getResour]]></description><category></category></item><item><title><![CDATA[安卓6.0关于悬浮窗导致"检测到屏幕叠加层"的开发端解决方案]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/62425473</link><guid>https://blog.youkuaiyun.com/fg607/article/details/62425473</guid><author>fg607</author><pubDate>Thu, 16 Mar 2017 16:09:38 +0800</pubDate><description><![CDATA[安卓6.0以后当弹出权限授权框时，考虑到安全问题，如果屏幕上存在悬浮窗，会出现”检测到屏幕叠加层”的提示，导致不能正常授予权限。最简单的解决方案就是手动关闭悬浮窗了，不过这样的用户体验当然是很糟糕的，今天要介绍的方法是在弹出授权框时自动隐藏悬浮窗，授权框消失后再恢复悬浮窗。解决思路：如果能检测授权框弹出界面，就可以顺利解决问题，当然系统没有给开发者预留弹出授权框的接口，需要自己去检测界面的变化，因为]]></description><category></category></item><item><title><![CDATA[Android在Service中全局监听输入法的三种可实现方式]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/62218518</link><guid>https://blog.youkuaiyun.com/fg607/article/details/62218518</guid><author>fg607</author><pubDate>Wed, 15 Mar 2017 11:52:18 +0800</pubDate><description><![CDATA[在Service中全局监听输入法意思就是可以在任何界面都可以监听输入法，不局限于自己的APP。

方法一：根据切换输入法会在通知栏显示通知实现
优点：简单高效
缺点：手机必须安装两个以上输入法
通常语言为中文的情况下切换输入法的通知栏标题有”选择输入法”,”更改键盘”,”选择键盘”,”更改输入法”这四种,在NotificationListenerService 
onNotificationPosted]]></description><category></category></item><item><title><![CDATA[通过ssh反向隧道及nginx反向代理实现外网控制内网nodemcu芯片]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/52123833</link><guid>https://blog.youkuaiyun.com/fg607/article/details/52123833</guid><author>fg607</author><pubDate>Thu, 04 Aug 2016 22:53:47 +0800</pubDate><description><![CDATA[基本思路：通过ssh反向隧道实现外网服务器端口到内网中继服务器端口的转发，通过配置内网中级服务器nginx反向代理，将外网发过来的请求转发到目标服务器上。最后实现通过访问外网ip转到访问内网的目标服务器。


(一)ssh反向隧道将外网服务器端口转发到内网中继服务器指定端口
(1)首先需要指定外网中继服务器 sshd 的 GatewayPorts(转发外部主机的端口)
打开中继服务器的]]></description><category></category></item><item><title><![CDATA[阅读Fragment源码笔记]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/51828875</link><guid>https://blog.youkuaiyun.com/fg607/article/details/51828875</guid><author>fg607</author><pubDate>Tue, 05 Jul 2016 10:45:22 +0800</pubDate><description><![CDATA[Fragment具有自己完整的生命周期(当然和所关联的Activity是同步的)。相比Activity更加轻量级，但同时具有同样的功能，也能够将界面划分成不同的模块或者说是碎片，更加易于管理和维护。
　　Fragment生命周期onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->o]]></description><category></category></item><item><title><![CDATA[阅读Service源代码笔记]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/51814130</link><guid>https://blog.youkuaiyun.com/fg607/article/details/51814130</guid><author>fg607</author><pubDate>Sun, 03 Jul 2016 16:25:42 +0800</pubDate><description><![CDATA[启动Service有两种方法：startService()和bindService()。区别在于startService会长期运行，bindService会随着调用它的组件的销毁而销毁。
　　startService很简单，主要是每次调用都会传递Intent到onStartCommand()方法，然后根据不同的值进行不同的操作。
　　bindService相对比较复杂，与调用者在同一进程需要通]]></description><category></category></item><item><title><![CDATA[阅读Activity源码笔记]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/51803837</link><guid>https://blog.youkuaiyun.com/fg607/article/details/51803837</guid><author>fg607</author><pubDate>Fri, 01 Jul 2016 20:34:28 +0800</pubDate><description><![CDATA[Activity的启动过程大概看了一下老罗的分析，真的是太复杂了。最后是由ActivityThread,通过ClassLoader获取到要启动的Activity,通过Instrumentation的callActivityOnCreate函数调用Activity的onCreate完成创建。当然activity的生命周期调度是由ActivityManagerService负责的。
　　１．Acti]]></description><category></category></item><item><title><![CDATA[阅读Handler源码笔记]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/51792677</link><guid>https://blog.youkuaiyun.com/fg607/article/details/51792677</guid><author>fg607</author><pubDate>Thu, 30 Jun 2016 19:46:21 +0800</pubDate><description><![CDATA[学习android大半年了，今天才去阅读Handler源代码真是惭愧啊！
　　安卓有一道经典的面试题就是问Handler运行机制原理。包括和Looper,Thread,MessageQueue和Message之间的关系。之前不知道为什么没有去看源代码，只是简简单单的从网上搜了一下他们之间的关系，就天真的认为自己清楚了，哎，真是天真到了极点。


　　总结一下今天阅读Handler源码的收获]]></description><category></category></item><item><title><![CDATA[android获取控件测量尺寸的方法]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/50350068</link><guid>https://blog.youkuaiyun.com/fg607/article/details/50350068</guid><author>fg607</author><pubDate>Fri, 18 Dec 2015 10:45:45 +0800</pubDate><description><![CDATA[监听控件的全局layout事件
View.getViewTreeObserver.addOnGlobalLayoutListener(new OnGlobaLayoutListener(){


   public void onGlobalLayout(){
    //do something
   //remove listener
  View.getViewTreeOber]]></description><category></category></item><item><title><![CDATA[andriod提高开发效率的第三方类库和框架]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/49975667</link><guid>https://blog.youkuaiyun.com/fg607/article/details/49975667</guid><author>fg607</author><pubDate>Sun, 22 Nov 2015 10:35:55 +0800</pubDate><description><![CDATA[(一) DI框架

    1.  butterknife 适用于activity中的view控件 ，fragment中的view控件,以及其它adapter中的view控件的绑定，特点比较灵活，适用地方多。

使用方法：compile 'com.jakewharton:butterknife:7.0.1'

    2. androidannotations  适用于activity]]></description><category></category></item><item><title><![CDATA[floatball悬浮球总结]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/48765113</link><guid>https://blog.youkuaiyun.com/fg607/article/details/48765113</guid><author>fg607</author><pubDate>Sun, 27 Sep 2015 10:29:51 +0800</pubDate><description><![CDATA[floatball悬浮球总结
悬浮窗的实现
ActionBar和ViewPager实现的Tab滑动页面
ListView列表条目动态刷新
获取图片浏览器返回的图片数据
自定义ActionBar菜单
一、悬浮窗的实现
主要内容是将floatball的view添加到WindowManager中
WindowManger的获取mWindowManager  =  (WindowManager) getAp]]></description><category></category></item><item><title><![CDATA[android中使用隐藏类的方法]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/48736093</link><guid>https://blog.youkuaiyun.com/fg607/article/details/48736093</guid><author>fg607</author><pubDate>Fri, 25 Sep 2015 18:41:25 +0800</pubDate><description><![CDATA[在某些特殊应用中需要使用隐藏类中的功能，总结一下隐藏类的使用方法。
发布的SDK版本中android.jar包中不包含隐藏类的class文件，所以没办法直接使用隐藏类。


使用隐藏类方法：

（一）提取隐藏类的class文件

（1）从编译的完整版本的SDK中提取对应隐藏类的class文件
（2）从手机对用的SDK版本中的framework.jar文件中提取
        ]]></description><category></category></item><item><title><![CDATA[模仿魅族flyme自带的悬浮球floatball，通过不同的触摸方式，模拟虚拟按键]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/47906735</link><guid>https://blog.youkuaiyun.com/fg607/article/details/47906735</guid><author>fg607</author><pubDate>Sun, 23 Aug 2015 17:01:55 +0800</pubDate><description><![CDATA[觉得魅族的悬浮球做的很不错，主要是简洁方便。于是就自己实现了一下。项目源代码：FloatingBall源代码
主要是解决三个方面的问题：
  1.桌面悬浮窗的实现
  2.设置悬浮球触摸事件（拖动，点击，上下左右滑动）

  2.模拟虚拟按键（返回，home,任务面板，电源键，菜单键等）


   （一）桌面悬浮窗的实现
     通过WindowManager将自定义的悬浮球布]]></description><category></category></item><item><title><![CDATA[基于Xposed框架的锁屏录音机的实现总结]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/46815035</link><guid>https://blog.youkuaiyun.com/fg607/article/details/46815035</guid><author>fg607</author><pubDate>Thu, 09 Jul 2015 11:55:45 +0800</pubDate><description><![CDATA[需求:在手机屏幕锁定的状态下,长按音量上键开启录音机,再次长按时停止录音.


基本方法:通过Xposed框架hook类classPhoneWindowManager的interceptKeyBeforeQueueing方法,截获音量上键事件,调用录音机功能.


1.创建Xposed模块的方法:
     (1)在androidmanifest.xml中配置application的]]></description><category></category></item><item><title><![CDATA[定时器Timer和定时任务TimerTask的用法]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/46602029</link><guid>https://blog.youkuaiyun.com/fg607/article/details/46602029</guid><author>fg607</author><pubDate>Tue, 23 Jun 2015 08:32:39 +0800</pubDate><description><![CDATA[1、重写TimerTask中的run()方法，TimerTask实现了Runnable接口。
2、Timer.schedule(TimerTask task, long delay, long period)]]></description><category></category></item><item><title><![CDATA[bindService用法]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/46601895</link><guid>https://blog.youkuaiyun.com/fg607/article/details/46601895</guid><author>fg607</author><pubDate>Tue, 23 Jun 2015 08:23:51 +0800</pubDate><description><![CDATA[特点：
1、会跟随Activity的销毁而销毁
2、可以通过service暴露的接口，调用service中的方法


用法：


Activity中
1、实现ServiceConnection接口
2、在Activity中调用blindService(Intent,ServiceConnection,BLIND_AUTO_CREATE);
3、在ServiceConnecti]]></description><category></category></item><item><title><![CDATA[Gson多层嵌套Json解析]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/46513769</link><guid>https://blog.youkuaiyun.com/fg607/article/details/46513769</guid><author>fg607</author><pubDate>Tue, 16 Jun 2015 08:28:42 +0800</pubDate><description><![CDATA[多层嵌套Json解析 
采用静态内部类的形式实现多层嵌套 
对于数组采用List成员实现 
 
{ 
"mp3list": 
[ 
    { 
        "name": "爱我别走", 
        "artist": "张震岳", 
        "size": "2.8M", 
        "url": "http://127.0.0.1"]]></description><category></category></item><item><title><![CDATA[Monkey Music Player知识要点总结]]></title><link>https://blog.youkuaiyun.com/fg607/article/details/46513745</link><guid>https://blog.youkuaiyun.com/fg607/article/details/46513745</guid><author>fg607</author><pubDate>Tue, 16 Jun 2015 08:19:07 +0800</pubDate><description><![CDATA[要点概括
1、文件管理器,AlertDialog
2、Service应用，Notification通知栏，防止Service被杀，点击通知栏返回后台程序，（默认会创建新的Acticity）
3、Brodcast广播的应用
4、Activity之间的滑动切换
5、滑动侧边栏的实现,slideMenu类
6、响应实体按键，返回键使程序后台
7、程序被任务管理器强杀时的安全退出
8、Ac]]></description><category></category></item></channel></rss>