首页 文章 精选 留言 我的

精选列表

搜索[文档处理],共10000篇文章
优秀的个人博客,低调大师

【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具

什么是TraceView?先看下百度出来的解释吧: Traceview是android平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。 关于Traceview的使用 首先,必须在程序当中加入代码,以便生成trace文件,有了这个trace文件才可以将其转化为图形。 要添加的代码如下: Java代码 // start tracing to "/sdcard/yourActivityTrace.trace" Debug.startMethodTracing("yourActivityTrace"); // ... // stop tracing Debug.stopMethodTracing(); // start tracing to "/sdcard/yourActivityTrace.trace" Debug.startMethodTracing("yourActivityTrace"); // ... // stop tracing Debug.stopMethodTracing(); Google Dev Guide当中说可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),但是在实际的测试时发现这种方式其实并不好用,因为通常情况下我们的activity的onDestroy()是由系统决定何时调用的,因此可能等了很长时间都不会得到这个trace文件。因此决定在onStop()中来调用Debug.stopMethodTracing()。这样当我们切换到其它activity或者点击home键的时候onStop()就会被调用,我们也就可以得到完整的trace file。 在运行程序之前,首先要保证我们的AVD是一个带有SD card的AVD,这样才能使trace文件保存到/sdcard/...当中。运行后可以任意做一些操作,然后点击home键。这是通过DDMS file explore就可以看到/sdcard/目录下有一个trace文件,现在把这个文件copy到电脑上指定的目录,假设是C:/tracefile 目录下。 可以通过命令行来执行traceview,进入tools目录后,执行 traceview C:/tracefile/yourActivityTrace.trace 之后就可以看到图形了,接下来就是按照Google Dev Guide中的解释去分析图形就OK了。 下面来看如何实现以及需要注意的地方: 实现的步骤分为三步:1.必须先在我们的模拟器中创建sdCard ;2.将我们的调试代码嵌入工程;3.利用TraceView来观察和分析代码情况; 1.对于创建模拟器的sdCard这里写出两种方式: 第一种:我们在eclipse中创建avd的时候的时候 在选择api下面有个 Sd Card 的选项,第一项填入创建sdcard的大小即可。 第二种:cmd 命令! 打开cmd 并且cd 到android sdk tool 路径下;(或者在环境变量Path中将sdk tool路径配置上,然后重新打开cmd) 使用mksdcard -l mycard 1024M F:/mysdcard.img创建了一个1G的sdcard; 使用emulator -avd my_android -sdcard F:/mysdcard.img激活sdcard! 最后在eclipse Preferences-->Android-->Launch加入-sdcardF:/mysdcard.img (此步骤就是在第一种创建方式中添加sdcard的支持) 备注1: 如果sdcard分配的空间太小,则程序追踪文件就一直记录到sd储蓄卡容量慢为止,所以调试前,要为程序生成一个适当的SD存储卡也较为重要,因为程序运行时间越长,这个追踪文件也就越大。 备注2; (如果第二种创建方式中的第二部激活出现 emulator: ERROR: the user data image is used by another emulator. aborting,请关闭模拟器,或者进入目录:/Documents and Settings / 用户 / .android /的AVD / *设备* / (比如我的目录是:C:/Documents and Settings/Administrator/.android/avd/android2.0.avd)然后删去以.lock结尾的文件夹就行(我简单解释下为什么要删除这些文件呢,其实.lock是加锁,如果程序崩溃等原因导致无法清除这些以.lock结尾的文件夹,就会出现这个问题,也就是这个avd的锁没有被释放,导致avd manager以为这个avd正在使用当中。)) 2.将我们的调试代码嵌入工程 正如我们百度到的说明一样,在程序运行的开端加上 Debug.startMethodTracing("yourActivityTrace"); 然后在onPause()中调用Debug.stopMethodTracing(); 为什么要将结束写在onPause()中而不写在onStop(),那么如果你去看api的话,你会看到,Api中介绍onPause()会在你返回和点击home按键后触发,而onStop()一般是由系统来触发,当该程序处于后台的时候,而且当内存紧张的时候,可能会调用,但是可能永远不会调用到! 备注:要记住当把调试代码加入项目中以后不要立即运行项目,而是必须在AndroidMainfest.xml中定义一条"写入SD卡的权限"那么添加权限的代码如下: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 因为咱们的调试代码会在SD卡中生成一个追踪文件,也就是往SD卡中写入了数据,所以需要声明一条权限。这里必须注意哦! <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.himi" android:versionCode="1" android:versionName="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-sdkandroid:minSdkVersion="4"/> </manifest> 3.运行项目并且退出项目从而得到的追踪文件,利用TraceView来进行分析代码运行状况: 打当正常运行了项目并且点击返回或者home按键就会在 sdcard中生成一个.trace的文件。sdcard 目录 在eclipse下,点击: windows-show view-other-android-File explorer 右上角的两个箭头,第一个表示从模拟器sdcard导出文件,第二个表示从PC上导入文件到sdcard中、“—”代表删除 ..... 然后我们通过cmd来运行生成的追踪文件traceview C:/name追踪文件所在的路径放在C盘,放在C盘以外别的盘的话我这里是无法正常打开traceview的不知道什么原因。 name 表示生成的.trace文件,cmd的时候不需要输入“.trace”后缀 ;然后会出现TraceView的分析窗口; 【cmd 命令! 打开cmd 并且cd 到android sdk tools 路径下;(或者在环境变量Path中将sdk tool路径配置上,然后重新打开cmd)】 注意1:如果出现一下图片这种内存溢出的问题; 解决方法:到SDK 下的tools 下 找到 traceview.bat 文件,鼠标右键-编辑(或者记事本打开),最后一行替换成这样: call java -Xms128m -Xmx512m -Djava.ext.dirs=%javaextdirs% -jar %jarpath% %* 注意2:如果出现路径不对的问题: 例如:我的 himi.trace 放在了C盘,那么我的cmd命令是: traceview c:/himi 然后回车! 但是这里要小心,因为 /h 这样可能被认为是转义字符!!!为了避免可以尽可能不要使用h,n,r,t,等等成为名字的头字母,当然还有一种就可以完全避免这种问题,例如还是我的C盘 himi.trace 文件,可以写cmd命令的时候写成: traceview c://himi 嘿嘿~要注意细节。 下面是运行起来的TranceView: 最右上角表示运行程序总共用了多少时间,从traceview画面中我们看到有各种颜色,每种颜色代表不同的函数和步骤,那么同一颜色的区域越大,就代表这个步骤运行时间越长,或者看到下面的统计表,明显可以看出除了序列 0 1 是系统函数外,2. 3.函数 占用的时间比较长,那么序列4是个自定义的函数名为 “hot”这个占用了几乎与主线程 主draw的时间一样了,那么肯定有问题。当然其实这个方法是我故意写的,就是为了来演示traceview。这个hot函数的代码如下: /** * @author Himi * @param canvas */ public void hot(Canvas canvas) { for (inti=1; i<100; i++) { Bitmapbmp=BitmapFactory.decodeResource(getResources(), R.drawable.icon); canvas.drawBitmap(bmp, i += 2, i += 2, paint); } } 很明显我在故意消耗内存和时间。 那么,在traceview的右半部统计字段中: Exclusive: 同级函数本身运行的时间 Inclusive 就是说除统计函数本身运行的时间外再加上调用子函数所运行的时间 Name:列出的是所有的调用项,前面的数字是编号,展开可以看到有的有Parent 和Children子项,就是指被调用和调用。 Incl: inclusive时间占总时间的白分比 Excl: 执行占总时间的白分比。 Calls+Recur Calls/Total: 调用和重复调用的次数 Time/Call: 总的时间。(ms) 所以traceview是个非常好的程序监视工具,可以帮助找出程序运行缓慢时的函数,让我们的代码不断完善和改进! 本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/606325,如需转载请自行联系原作者

优秀的个人博客,低调大师

MySQL数据库root账户密码忘记两种处理方法(保有效)

方法1: 1.停止MySQL服务 # kill `cat /var/run/mysqld/mysqld.pid` 或者 # pkill mysqld 2.创建一个密码赋值语句的文本文件 # vi mysql-init ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass!6'; 在加载授权表之前重置密码。 3.使用—init-file选项启动MySQL服务 # mysqld --init-file=mysql-init --user=mysql & 4.删除文本文件,使用新密码连接MySQL # rm -f mysql-init # mysql -uroot -p 'MyNewPass!6' 5.停止MySQL服务并正常启动 # kill `cat /var/run/mysqld/mysqld.pid` # systemctl start mysqld 方法2: 1.停止MySQL服务 # kill `cat /var/run/mysqld/mysqld.pid` # pkill mysqld 2.使用--skip-grant-tables --skip-networking选项启动MySQL服务 # mysqld --skip-grant-tables --skip-networking --user=mysql --skip-grant-tables:跳过授权表认证 --skip-networking:加了跳过授权表选项后所有的人都可以无密码登录,这是很不安全的,此选项不监听网络,防止恶意登录。 3.无密码连接MySQL # mysql 4.重置密码 mysql> FLUSH PRIVILEGES; mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass!6'; 5.停止MySQL服务并正常启动 # kill `cat /var/run/mysqld/mysqld.pid` # systemctl startmysqld 简单、快捷、有效,记得收藏哦!万一哪天root密码找不到了呢! 想学习更多MySQL5.7最新数据库技术,可以看下我录制的视频教程:https://ke.qq.com/course/251737

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册