自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 内存泄漏-内部类持有外部类引用

1.内部类持有外部类引用我们在处理Android内存泄漏的时候,经常会遇到一些是由于内部类持有外部类引用而引发的。严格来说是非static的内部类的非static对象或匿名内部类的非static对象持有了当前所在外部类的引用造成的。下面我们用一个例子来进行说明public class LeakTestActivity extends BaseActivity { private But...

2019-11-25 00:28:45 5020 5

原创 Android疑难杂症之Toast引起的BadTokenException

1.现象分析当我们将targetSDK升级到26以上后,发现项目中报告了很多BadTokenException异常,查看堆栈几乎都与Toast有关:通过堆栈查看源码知道Toast是通过内部类TN的handleShow()方法来展示浮窗,而这个方式是可能会抛出WindowManager.BadTokenException异常的,虽然api26之后google对这个异常进行了捕获,使其不至于造成...

2019-07-09 21:14:59 646

原创 Android疑难杂症之TimeoutException

1.分析原因在android开发中经常会到一些即使看了堆栈也无法快速定位的问题,因为这些堆栈几乎都是系统代码,并无业务代码,而且发生crash打印的堆栈也不一定是这个地方导致的。例如我们今天要讨论的java.util.concurrent.TimeoutException,我们这里能查询到一个上报的堆栈如下:java.util.concurrent.TimeoutException: and...

2019-07-04 00:30:07 1872

原创 FFmpeg系列(二)-Android项目引入FFmpeg库播放视频

在系列一中讲述了如何编译FFmpeg的源码,现在就在Android项目中引入我们编译出来的库,并实现播放一个在线视频的功能新建Android工程新建一个支持ndk的Android工程,在AS中新建工程就不再详述了,详细的新建ndk工程,可以参考AndroidStudio中使用JNI/NDK示例 需要注意的一点就是在新建导航中注意勾选Support C++这个选项,这样新建的Android工程就...

2019-04-11 16:12:02 421

原创 FFmpeg系列(一)-Mac环境下使用NDK编译FFmpeg

如果需要做音视频相关的内容,必然绕不开的一个东东就是FFmpeg。它是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。总之FFmpeg是处理音视频非常强大的一个...

2019-04-11 11:06:19 704

原创 LeakCanary检测内存泄漏源码分析

关于LeakCanary的出身和作用这里就不多说了,也不是本文的重点。这些入门知识可以参考如下博客LeakCanary中文使用说明。 LeakCanary检测内存泄漏(主要Activity内存泄漏)主要分为3个部分:监听 监听对象(Activity)的生命周期,并在对应回调接口(onDestroy)中做检测。检测 在监听中的回调接口(一般是一个对象本应该被销毁的地方)里面检测对象是否...

2018-07-27 22:50:43 205

转载 CSDN-markdown编辑器模版

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...

2018-07-27 00:47:37 205

原创 Bootchart分析Android6.0开机性能

Bootchart是一个用于Linux启动过程性能分析的开源软件工具,以可视化的方式对GUN/Linux的开机启动过程进行性能分析,包括资源的使用(如CPU,磁盘等),各进程的执行时间信息等。根据分析结果,确定系统启动的性能瓶颈,制定相应的优化策略。由于Android系统是基于Linux的,所以我们可以使用Bootchart来分析开机性能。实际上在Android中已经集成了Bootchart这一开源

2017-03-27 22:53:28 5289 2

原创 AndroidStudio导入项目过慢

AndroidStudio导入项目过慢当我们使用AndroidStudio(AS)导入项目File->New->Import Project时,常常需要等待很长一段时间,这是因为此时AS一直在根据项目\gradle\wrapper\gradle-wrapper.properties中的配置信息:distributionUrl=https\://services.gradle.org/distribu

2017-03-22 00:28:53 445

原创 AndroidStudio导入项目过慢

当我们使用AndroidStudio(AS)导入项目File->New->Import Project时,常常需要等待很长一段时间,这是因为此时AS一直在根据项目\gradle\wrapper\gradle-wrapper.properties中的配置信息:distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-al

2016-12-20 17:37:10 1474

原创 ButterKnife控件无响应

本文主要说明一些在使用这个框架中的控件无响应的细节:1. AndroidStudio中添加ButterKnifeFile->Settings->Plugin,输入butter搜索,并安装重启AndroidStudio. 安装ButterKnife插件 这时在我们的工程的app下的build.gradle中添加上了下面一段代码:compile 'com.jakewharton:butterkn

2016-12-13 16:47:11 1916

原创 Fragment commit already called的错误

在使用fragment时,当需要使用事务transaction来动态切换时,每一个commit都需要使用局部临时变量,不能使用全局变量,否则会报告commit already called的错误。例如: if (fragment.getTag().equals(TAG_FRAGMENT_ONE)) { //每次使用时都使用局部变量FragmentManager 和FragmentTransacti

2016-12-13 16:40:17 2637

原创 Android Activity的生命周期

1. Android Activity的生命周期在一个activity的生命周期中,系统会像金字塔模型一样去调用一系列的生命周期回调函数。Activity生命周期的每一个阶段就像金字塔中的台阶。当系统创建了一个新的activity实例,每一个回调函数会向上一阶移动activity状态。处在金字塔顶端意味着当前activity处在前台并处于用户可与其进行交互的状态。 Figure1 activi

2016-12-13 16:38:17 444

原创 Layout中的weight

weight 权重的值指的是每个部件所占剩余空间的大小,该值与同级部件所占空间大小有关。例如,我们设置一个View的权重是2,另一个View的权重是1,那么总数就是3,这时第一个View占据2/3的空间,第二个占据1/3的空间。对于所有的View默认的权重是0,如果只设置了一个View的权重大于0,则该View将占据除去别的View本身占据的空间的所有剩余空间。例如这里的一个EditText和Bu

2016-12-13 16:30:19 334

原创 自定义Android资源覆盖rro方案

1. framework层rro资源覆盖方案在\framework\base\core\jni\android_util_AssetManager.cpp中: before:static void android_content_AssetManager_init(JNIEnv* env, jobject clazz, jboolean isSystem){ if (isSystem)

2016-12-04 12:26:42 1978 2

原创 Android运行时资源替换-Runtime Resource Overlay

一、替换第三方应用的资源1.需求提出在Android中当我们需要修改某个应用的一些资源时,例如app中的图片资源、文字资源和颜色等时,最直接的做法就是在应用的代码中修改对应的资源文件。以下就是一个简单的例子: 应用的目录结构 应用运行的效果 现在我们需要修改“这是原生应用的资源”这段文字,最直接的做法就是在应用中修改对应的资源内容:res/values/strings.xml<?xml

2016-11-20 11:48:44 11678 2

原创 Android7.0中PopupWindow弹出位置异常问题

我们在Android开发中经常会使用到PopupWindow来显示内容,在Android7.0以前。 // 定义一个PopupWindow变量,并设置宽、高 PopupWindow popupWindow = new PopupWindow(mWidth, mHeight); popupWindow.setFocusable(true); // 在某个控件下

2016-10-25 17:49:20 9827 5

原创 关于adb shell命令后报错error:device not found的一种解决方案

做Android开发连接手机调试时,明明已经打开了开发模式,允许USB调试,连接上手机后仍然无法发现设备,在控制台中输入adb shell后报错error:device not found。网上的做法大致分为: 1、adb kill-server来杀死adb进程,然后再使用adb start-server来开启命令; 2、检测5037(adb.exe默认端口)是否被占用,关闭除adb.exe以外

2016-10-19 11:07:28 105726 5

原创 Android系统Java层访问Native层函数

Android系统中Java层函数需要访问Native层函数的话,需要通过Jni,下面通过一个示例来演示windows环境下,在java中调用C库函数。1、编写java代码。在java层写好类和函数,例如HelloJNI.java:class HelloJNI { // 本地方法声明 native void printHello(); native void printStri

2016-10-14 09:57:34 1889

转载 Android开机动画流程

Android系统在启动过程中,最多可以出现三个画面。第一个开机画面是在内核启动的过程中出现,是一个静态的画面;第一个画面是在init进程启动的过程中出现的,也是一个静态的画面;第三个画面是在系统服务启动的过程中出现 ,是一个动态的画面。着三个画面都是在一个被称为帧缓冲区(frame buffer,简称fb)的硬件设备上进行渲染的。本文主要分析第三个启动画面的流程。 在Android层动画的流程图

2016-09-13 17:58:28 7555

原创 Android项目使用Lame库录制.mp3格式音频

在android开发中常常需要使用设备录制音频,但是得到的音频文件格式通常是.ma4或.arm等格式,为了得到具有通用格式的mp3音频文件。这里可以在andoid项目中使用开源库。 从github上下载了一个开源项目,这个android项目中使用了lame这个开源库来录制mp3格式的音频文件。下面通过几个步骤来一步一步移植下载的开源项目到自己的android开源项目中: 1、在eclipse中配

2015-05-04 22:24:57 2566

原创 Android自定义对话框

对话框的布局: linkSetting.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height

2015-04-14 17:04:54 509

原创 服务端和Android客户端利用Socket传输JSON数据

JSON是一种组织数据的结构模型(和XML类似),当需要在服务端和Android客户端之间传递大量字符串数据时,采用JSON往往比较高效。 服务端(核心代码):byte[] jsonByte = polmanListStr.getBytes("GB2312");DataOutputStream output = new DataOutputStream(socket.getOutputStre

2015-04-08 22:37:36 5824

原创 Android中广播接收者的注册与释放

Android中常常利用广播机制来在各个组件之间传递消息,例如在Activity和Service之间。 在Activity中注册广播接收者,来接收来自Service的广播:public class LoginReceiver extends BroadcastReceiver { private boolean loginResult = false; @Overr

2015-04-06 16:44:20 3805

原创 Socket及时通讯小范例

服务端(测试通过):package org.whu.jay;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Serve

2015-04-05 11:31:17 676

原创 Socket通信中中文乱码的问题

1、Android客户端Socket socket = new Socket("192.168.1.130", 3000);OutputStream os = socket.getOutputStream();os.write(("用户名").getBytes("GB2312"));os.close();socket.close();这里在写入数据时,需要将写入的数据进行转码:os.writ

2015-03-31 22:41:21 14144

原创 Android中报错 FATAL EXCEPTION MAIN

Android中报错 FATAL EXCEPTION MAIN出现这个问题的原因多半是因为所用到的资源没有找到: 例如: 1、资源引用错误TabSpec spec2 = tabHost.newTabSpec("tab2");spec1.setIndicator("通知公告");spec1.setContent(R.id.tabNotification);tabHost.addTab(s

2015-03-14 11:37:22 3700

原创 tomcat搭建简易网站

启动tomcat,将文件(.txt,.png)放到webapps/root文件夹下面:在浏览器中可以访问到该资源,浏览器可以解析并显示出来:

2015-03-12 14:53:17 839

原创 画笔paint的使用

在android编程中,画图形就一定需要使用画笔:Paint p = new Paint();这里仅仅是构造了画笔对象,但还需要设置画笔的属性,然后设置画笔的属性。在onDraw()函数之外进行设计就会报错:要设置画笔的属性,必须在onDraw()函数当中进行:

2015-03-01 11:46:40 624

原创 Flash Builder中修改字体

1、修改编码字体在菜单项中点击“窗口”->“首选项”->“常规”->“颜色和字体”,在右边的选项卡中选择“基本”,并选中“文本字体”:点击右边的编辑(Edit)进入字体的编辑界面,对代码的字体进行设置:2、修改注释文字的字体。同代码字体一样,首先进入首选项窗口,然后从左边的FlashBuilder->编辑器->语法着色,在右边选择文件类型(这里以mxml为例),对文件中

2015-01-06 22:13:17 1015

原创 FlashBuilder中BlazeDS服务的配置

在利用FlashBuilder进行移动开发时,需要配置应用程序的服务器,注意这里的根URL需要填入本机的ip地址:首先得到本机的IP地址:192.168.1.138。再在FlashBuilder中进行配置:

2014-12-08 19:23:20 678

原创 flex中SDK选择不合适引起的问题

在flex编程中,当几个项目之间相互yinyong

2014-11-22 19:35:22 1059

原创 notepad++中运行程序出现“编码GBK不可映射”

用notepad++编写java源文件,然后直接在这个平台上编译运行

2014-11-18 10:55:44 1031

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除