自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (1)
  • 收藏
  • 关注

原创 Git常用命令

Git常用命令

2024-04-29 11:05:16 914

原创 Python中format的常见用法

python format

2024-04-28 11:48:49 622 2

原创 Perfetto概览

Perfetto是谷歌提供的一个用于性能检测和 trace 文件抓取分析的生产级开源工具包。它可以帮助我们进行应用层面以及系统层面的 trace 文件抓取、native/java 内存剖析。它还提供了一个强大的库能够帮助我们在 web 网页上对抓取的trace 文件进行可视化分析,并使用 SQL 语句对大GB trace 进行查询分析。

2023-07-07 17:56:10 901

原创 使用Batterystats和Battery Historian进行耗电检测

本文主要介绍Batterystats和Battery Historian的基本使用步骤和工作流程,如果您要想学习怎样使用Battery Historian分析耗电详情,请参考文档: Analyze power use with Battery Historian。Batterystats是一个Android framework中的工具,用于采集设备上的耗电数据。你可以用adb把采集到的耗电数据d...

2020-03-18 11:51:25 1036

原创 计算Android应用的fps

一、依赖主线程 Looper,监控每次 dispatchMessage 的执行耗时Looper#loop 代码片段:public static void loop() { ... for (;;) { ... // This must be in a local variable, in case a UI event sets the logg...

2020-02-27 17:27:33 1237

原创 统计Android的内存信息

获取系统的内存信息使用adb命令获取adb shell cat /proc/meminfo解释一下可用内存availMem为什么是MemFree和Cached的总和,MemFree指的是完全未被使用的内存,Cached指的是,当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,也就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache ...

2020-02-25 23:09:10 2141

原创 统计Android应用的CPU占用率

/proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为内核与进程提供通信的接口。用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取/proc目录中的文件时,proc文件系统是动态从系统内核读出所需信息并提交的。 从proc文件中可以获取系统、进程、线程的cpu时间片使用情况,所...

2020-02-22 13:07:11 9198 8

原创 Mac下配置android环境变量

1、在命令行进入当前用户的home目录:cd ~/2、查看当前目录是否有.bash_profile,如果没有则新建一个:touch .bash_profile3、打开.bash_profile:open .bash_profile4、在文件中写入以下内容:export ANDROID_HOME=/Users/jenny/Library/Android/sdkexport PATH=${P...

2020-02-18 16:44:39 280

原创 Android SDK版本名和API level对照表

VersionNameAPI level9.0Pie288.1Oreo278.0Oreo267.1Nougat257.0Nougat246.0Marshmallow235.1Lollipop225.0Lollipop214.4KitKat194.3Jelly Bean184.2...

2020-02-17 18:04:45 290

原创 Android StrictMode

什么是StrictModeStrictMode即为严苛模式,它可以很方便地应用于检查Android应用程序的性能和存在的问题。当开启这个模式后,开发者能很好地检查应用中存在的潜在问题。最常用的场景就是检测主线程中本地磁盘和网络读写等耗时的操作。StrictMode的两大策略1、线程策略,即TreadPolicy2、VM策略,即VmPolicy。ThreadPolicy线程策略检测的主要...

2019-12-28 12:28:09 293 1

原创 Android存储路径

Android中常用的存储路径1、/data/data/pkgname/删除条件:App卸载时自动删除。获取路径方法:context.getFilesDir(); // /data/data/pkgname/filescontext.getCacheDir(); // /data/data/pkgname/cache2、/sdcard/Android/data/pkgna...

2019-12-09 23:02:32 303

原创 关于Android的.so文件

关于Android的.so文件CPU架构与ABI的关系Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。应用程序二进制接口(Application Binary Interface)定义了二进制文件...

2019-12-07 14:26:53 581

原创 Java设计模式——Builder模式

构建者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景1、相同的方法,不同的执行顺序,产生不同的事件结果时。 2、多个产品或者零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。 3、产品类非常复杂或者产品类中的调用顺序不同产生了不同的作用,这个时候使用建造者模式非常合适。 4、当初始化一个对象特别复杂,如参数多,且很多参数都具有默...

2018-03-27 16:12:56 209

原创 Java设计模式——观察者模式

观察者模式即发布订阅模式,发布者发布信息,订阅者获取信息。当发布者改变状态时,依赖它的订阅者会收到通知并自动更新。角色划分抽象被观察者角色:提供增加、删除、通知观察者的接口。 具体被观察者角色:用一个集合保存所有被观察者对象,实现增加、删除、通知观察者的功能。 抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。 具体观察者角色:实现抽象观察者角色所需要的更...

2018-03-27 11:24:31 163

原创 Java设计模式——工厂模式

工厂模式方便创建同种产品类型的复杂参数对象。简单工厂模式简单工厂模式又叫静态工厂模式,由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。 优点:实例的创建与使用分离,有利于软件结构的优化。用户直接获取实例,无需关心如何创建这些实例。 缺点:违反了开闭原则。角色划分工厂角色:它负责创建所有产品的实例。它实现创建所有产品的逻辑...

2018-03-26 22:59:55 183

原创 自定义APP权限

本文讲解APP开发者怎样利用Android的安全特性来自定义APP的权限。通过自定义权限,APP可以把它的资源和功能分享给其它APP。一些背景知识Android是权限分离操作系统,每个APP都运行在独自的运行空间内(用Linux user ID 和 group ID来区分),所以每个APP都互相独立的。APP可以定义供其它APP请求的权限,也可以定义供其它有相同签名的APP使用的权限, 以...

2018-03-07 11:28:24 1790

原创 请求APP权限

每个APP都运行在独自的进程中,如果APP需要访问其进程以外的资源或信息,那么它就需要请求对应的权限。APP需要在Manifest文件中列出要请求的权限,并在运行时请求用户授予权限(在Android 6.0及以上的版本中)。本文将讲解怎样用Android Support Library来检查和请求权限。Android 6.0 (API level 23)及以上的Android Framework也...

2018-03-06 17:38:29 4486

原创 Android权限概述

Android的权限机制是用于保护用户的隐式信息。APP访问敏感用户数据(如联系人和SMS)或某些系统功能(如Camera和Internet)时,必须请求用户授予对应的权限。根据被访问的特性,系统会自动授予权限或请求用户授予权限。本文将对Android权限是怎样工作的进行概述,包括:权限请求提示框是怎样展示给用户的、“安装时请求权限”与“运行时请求权限”的区别、权限是如何执行的、权限的类型及分组。...

2018-03-06 11:46:13 942

原创 Android Library的创建及使用详解

Android Library和Android APP、Java Library的区别Android Library在目录结构上与Android App相同,它能包含构建APP所需的一切(如源代码、资源文件、Android Manifest)。Android App最终被编译打包成能在Android设备上运行的APK文件,但是Android Library被编译成供其它Android App依

2018-01-25 12:18:56 21739 2

翻译 Android测试概述

用户在使用APP的某个功能时,与APP的交互方式是多样的。所以在进行应用程序的迭代开发时,应该测试各种使用和交互场景。使用迭代开发工作流程随着应用程序功能的扩展,一个APP可能会包含越来越多功能,如:从服务器获取数据、与设备的sensor交互、访问本地存储或呈现复杂的用户界面。因此,需要一个全面的测试策略来保证应用程序的多功能性和复杂性。当迭代地开发一个特性时,需要同时编写新的测试

2018-01-20 18:13:03 1639 1

翻译 Efficient Android Threading(第三章:Android中的多线程)

每个Android应用程序都包含了多个线程,这些线程依附于Linux进程,并用Dalvik虚拟机管理其内部执行。应用程序的线程类型有UI线程、Binder线程和后台线程。在本章中,我们将了解Android平台上线程的相关内容: •UI线程、Binder线程和后台线程之间的异同。 •Linux线程耦合。 •线程调度如何受应用程序进程级别的影响。 •运行的Linux线程Android应

2018-01-16 12:14:38 586

翻译 Efficient Android Threading(第二章:Java中的多线程)

本书的这一部分涵盖了由Linux、java和Android提供的异步处理机制。您应该理解它们是如何工作的、各种技术的特性以及风险。本章将为您提供PartII部分所述技术的基础知识。每一个Android应用程序应该遵循java语言的多线程编程模型。多线程编程提高了用户体验所需的性能和响应性,但同时也增加了程序的复杂性: •处理Java中的并发编程模型 •在多线程环境中保持数据一致性 •建立

2018-01-09 11:51:09 600

原创 Service详解_AIDL

为了便于对本文的理解,请先阅读上一篇文章《Service详解_ BoundService》。上篇文章讲解了怎样用BoundService实现应用内其它组件与Service的交互,本文将讲解怎样用AIDL实现进程间通信。AIDL简介AIDL(Android接口定义语言)和其它接口定义语言一样,它允许你定义Client和Service约定好的编程接口,以实现两者的进程间通信(IPC)。在安...

2017-12-12 13:22:48 402

原创 Service详解_BoundService

为了便于对本文的理解,请先阅读上一篇文章《Service详解_StartedService》。从上篇文章可以知道,在同一个APP内,其它组件能启动和停止一个StartedService,但是不能调用Service内的函数,不能获取Service的返回值。如果要实现组件与Service交互,就要使用BoundService。BoundService是Client-Server工作模式中的Server,

2017-12-12 13:14:32 487

原创 Service详解_StartedService

Service简介Service是Android四大组件之一,它能在后台长时间运行,且不提供用户操作界面。其它组件Start一个Service后,即使用户切换到其它APP了,Service也能继续在后台运行;其它组件Bind到一个Service后,就可以和Service交互或进行进程间通信。例如,可以在一个后台Service中进行crash日志上传、用户信息搜集、播放音乐等。Service类型Ser

2017-12-12 12:49:44 1413

原创 Android进程和线程详解

当应用程序组件启动,且应用程序没有其他组件运行时,Android系统为这个应用程序启动一个新的Linux进程,并开始运行一个主线程。默认情况下,同一应用程序的所有组件都在同一进程的主线程中运行。如果应用程序组件启动,并且已经存在该应用程序的进程(因为应用程序中的其它组件已经启动),则组件将在该进程中启动,并使用相同的主线程。但是,您可以通过设置让应用程序中的不同组件分别在不同的进程中运行,并且可以...

2017-12-04 20:14:56 3882

原创 AIDL详解

AIDL(Android接口定义语言)和其它接口定义语言一样,它允许你定义Client和Service约定好的编程接口,以实现两者的进程间通信(IPC)。在安卓系统中,一个进程通常不能访问另一进程的内存。所以,需要把他们的对象分解成操作系统可以理解的原语,这样才能把对象传递给对方进程。接口定义语言的编写很复杂,Android系统已经实现了,所以你只需要关注怎样定义接口。只有当来自不同应用程序的...

2017-12-04 17:25:17 520

原创 Intents和 Intent Filters详解

Intent是一个消息对象,您可以使用它请求另一个应用程序组件执行特定动作。Intent有三个基本使用场景: 1、 用于启动一个Activity: 您可以通过传递一个Intent到startActivity()或startActivityForResult()来启动另一个Activity。Intent用于描述要启动的Activity,及携带一些必需的数据。 2、 用于启动一个Servic...

2017-12-01 17:50:15 1442

原创 Broadcasts详解

Android系统和Android应用程序都可以发送和接收广播,类似于publish-subscribe设计模式。广播在某个特定事件发生时被发送,例如,当各种系统事件发生时(如系统启动或设备开始充电),Android系统就会发送广播。应用程序也可以发送自定义广播,例如,通知其他应用程序他们关注的事件(如数据下载完成)。应用程序可以注册广播接收器。当广播被发送时,系统自动将广播传递到已注册接收该...

2017-12-01 17:07:11 2473

原创 Service详解

Service简介Service是可以在后台长时间运行的Android应用程序组件,由其它组件启动,不提供用户界面。Service启动后,即使用户切换到另一个APP,它仍然在后台运行。另外,其它组件可以绑定到一个Service并与之进行交互,或进行进程间通信(IPC)。例如,Service可以在后台进行网络传输、音乐播放、I / O操作或Content Provider操作。Servi...

2017-09-22 17:31:02 828

原创 如何实现Android应用程序间的交互

一个APP通常有几个Activity,每个Activity显示一个用户界面,用户在界面中执行特定的操作(如查看地图或拍摄照片)。要实现用户从一个Activity跳转到另一个Activity,APP需要使用Intent来定义其执行某些操作的“意图”。 当使用诸如startActivity()之类的方法将Intent传递给系统时,系统将使用Intent来识别并启动适当的应用程序组件。使用Intent还...

2017-09-18 10:58:19 1960

原创 允许其他APP启动您的Activity

前面两个课程侧重于讲解怎样从您的APP启动另一个APP的Activity。但是,如果您的APP有供其它APP调用的功能,则应该准备好响应其他APP的调用请求。例如,如果您的APP有在朋友圈分享信息的功能,则最好支持ACTION_SEND Intent,以便用户可以从另一个APP启动您的APP来完成“分享”操作。要允许其他APP启动您的Activity,您需要在manifest文件中为相应的元素...

2017-09-18 10:49:28 2030

原创 启动Activity并获取返回结果

启动另一个Activity并不是单向的操作,您也可以启动另一个Activity并获取返回结果。startActivity()只启动另一个Activity,startActivityForResult()启动另一个Activity且获取返回结果。例如,您的APP可以启动相机APP,并获取捕获的照片。或者,您的APP启动联系人APP,以便用户选择联系人,然后您的APP将收到用户所选联系人的详细信息...

2017-09-15 09:40:38 4315

原创 使用隐式Intent启动其他APP

Android的最重要功能之一就是APP能够根据“Action”跳转到另一个APP。例如,如果您希望在地图上显示出您APP中的商家地址,则您不必在APP中建立一个显示地图的Activity,但您可以使用Intent创建一个查看地址的请求。然后Android系统启动一个能够在地图上显示地址的APP。您可以用显式Intent实现APP内各Activity之间的切换,显式Intent定义了要启动的目...

2017-09-14 20:31:31 2817

原创 Android应用程序适配多设备

全世界的Android设备有很多形状和尺寸。适配广泛的设备类型,可以让你的APP有更多的用户。为了尽量让你的APP完美,你的APP需要设配各种设备配置。你需要考虑适配不同的语言、不同屏幕大小和不同Android平台的版本。该课程教你如何使用基础平台功能,利用替代资源和其他功能,以便您的应用程序可以使用单个应用程序包(APK)在各种Android兼容设备上提供更优的用户体验。课程一:《And...

2017-09-10 10:56:20 448

原创 APP如何适配不同的Android版本

Android的最新版本会提供一些很棒的API,您的APP使用新版本API的同时也要兼容旧的Android版本,直到更多设备已更新到新版本的APP。本文档将向您展示如何利用最新的API,同时继续支持旧版本。根据对访问Google Play商店的设备数量的统计,平台版本分布表会进行定期更新,以显示运行每个版本的Android设备的分布情况。一般来说,一个APP最好能支持大约90%的活动设备,同时...

2017-09-10 10:49:49 6966

原创 Android应用如何适配不同的屏幕

Android使用size(尺寸) 和density(密度)这两个属性对设备屏幕进行分类。一个APP可能被安装到屏幕size和density不同的设备上。因此,APP应该包含一些替代资源,使其UI能适配不同的size和density。 •有四种基本的尺寸:small, normal, large, xlarge •和四个基本的密度:低(ldpi),中(mdpi),高(hdpi),超高(xhdp...

2017-09-07 17:56:44 1193

原创 Android应用如何支持不同的语言和文化

APP包含了需要适配多国、多文化的资源。例如,APP可能包含需要转换为当前语言环境的字符串。通常的做法是将文化特定的资源与APP的其他资源分开。Android根据系统区域设置来解决语言和文化特定的资源。您可以使用Android项目中的资源目录来支持不同的区域设置。您可以根据APP用户的文化习惯来定制您的APP资源。您可以提供适合用户语言和文化的任何资源类型。例如,以下屏幕截图显示了在设备的默认...

2017-09-07 09:17:22 2084

翻译 Efficient Android Threading(第一章:Android组件和使用多线程的必要性)

在讲解多线程之前,我们要先介绍下Android平台、应用架构、应用执行原理。本章讲述了本书后续部分所述线程相关的基本知识。Android平台相关的详尽资料请参考Android官方文档,或世面上最流行的Android编程相关书籍。Android软件堆栈APP运行在以Linux kernel、native C/C++库、Runtime为基础的软件堆栈上。如图1-1。 图1-1:Andr

2017-09-05 16:00:51 1034

原创 Android权限的最佳实现

来源:https://developer.android.com/training/articles/user-data-permissions.htmlAndroid的权限管理能保护设备上可用的敏感信息,只能在app的功能必须要访问敏感信息时才能使用对应的权限。本文档提供了有关如何实现相同(或更好)功能而无需访问敏感信息的方法。这不是关于Android操作系统中权限如何工作的详尽讨论。有关And...

2017-08-17 12:25:38 1359

AndroidServiceDemo

StartedService、BoundService、AIDL的使用例子,Service讲解博客地址:http://blog.csdn.net/jennyliliyang/article/details/78780942

2017-12-12

空空如也

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

TA关注的人

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