我正在研究为什么我的一些RecyclerViews表现不佳.当需要绘制视图的整个内容时,UI尤其滞后.
使用systrace我遇到了一个大框架,其中RecyclerView布局其视图:
如您所见,重复绘制相同的视图.在systrace中,我在RecyclerView框架上找到了以下描述:
OnLayout has been called by the View system. If this shows up too many times in Systrace, make sure the children of RecyclerView do not update themselves directly. This will cause a full re-layout but when it happens via the Adapter notifyItemChanged, RecyclerView can avoid full layout calculation.
我的RecyclerView的视图使用谷歌的数据绑定与可观察的值.
更新TextView的意思我不使用,textView.setText(titleTxt)但title.set(titleTxt)在哪里title类型ObservableField<String>.
显然我不是在调用,notifyItemChanged而只是更新绑定到布局的对象上的可观察字段.
在这种情况下使用数据绑定在性能方面是错误的吗?如果是这样,那么数据绑定的意义何在?移动UI主要由列表组成.
performance android systrace android-recyclerview android-databinding
我目前正在尝试运行 systrace 工具来分析我的用户界面性能。我按照此处所述设置环境:https ://developer.android.com/studio/command-line/systrace.html#syntax
但当我尝试跑步时
python systrace.py --time=10 -o mynewtrace.html gfx
Run Code Online (Sandbox Code Playgroud)
在 Android Studio 终端中,我收到以下错误:
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python:无法打开文件“systrace.py”:[Errno 2]没有这样的文件或目录
我还没有找到可行的解决方案。
我试图在非root设备上运行systrace.如果选择了任何跟踪事件,它总是会出现以下错误:
无法找到跟踪开始标记'TRACE:':错误打开/ sys/kernel/debug/tracing/events/cpufreq_interactive/enable:没有这样的文件或目录
如果没有选择跟踪事件,它可以工作,但跟踪不是很好.
systrace是否需要root访问权限?
请注意,我在Windows-7上直接从Eclipse(DDMS)运行systrace.
最新的Android Systrace页面 - http://developer.android.com/tools/debugging/systrace.html#options-4.3 - 显示'警报'和'框架'跟踪线,其中包含发生不良事件的圆圈.
尽管看到很多jank,我还是无法使用这些标记创建trace.html文件.
有谁知道谷歌可能用来创建他们截获的页面的命令?遗憾的是,他们没有提供它.
我正在尝试使用Android Studio中的systrace和默认的systrace选项集.我没有扎根电话.HTC Sense v6.0,Android 5.0.1,HTC SDK API等级6.55.当我这样做时,我得到了可怕的"无法收集系统跟踪.原因:收集系统跟踪时出现意外错误".使用adb shell,我确定/ sys/kernel/debug存在,但/ sys/kernel/debug/tracing不存在.有人用systrace和HTC One M8 /棒棒糖运气好吗?
我目前正在开发Android应用并试图改善开始时间.为了做到这一点,我正在使用Systrace工具.
我第一次运行应用程序(安装后),启动需要大约40秒,我得到了这个跟踪:
如您所见,标题为30秒浅紫色标签bindApplication.
在此之后,我关闭应用程序(从最近的活动中删除)并重新打开它.这次bindApplication标签只有4秒钟:
我的猜测是,这bindApplication与onCreateApp方法中的繁重工作有关,但我不知道如何发生这种情况.万一它onCreate有所帮助:在我初始化以下库:Parse,Crashlytics,Timber,ParseFacebookUtils和Google Analytics.
编辑:
这是App子类代码:
public class MyApp extends Application {
private Tracker tracker;
@Override public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
Trace.beginSection("MyApp");
}
Fabric.with(this, new Crashlytics());
// Parse setup
Parse.enableLocalDatastore(this);
ParseObject.registerSubclass( ... );
Parse.Configuration.Builder parseConfigBuilder = new Parse.Configuration.Builder(this).applicationId(
getString(R.string.parse_application_id))
.server(getString(R.string.parse_server_url));
if (BuildConfig.DEBUG) {
// add logs
Timber.plant(new DebugTree());
Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);
parseConfigBuilder.addNetworkInterceptor(new ParseLogInterceptor());
}
Parse.initialize(parseConfigBuilder.build());
ParseFacebookUtils.initialize(this);
ParseInstallation.getCurrentInstallation().saveInBackground();
AnalyticsManager.getInstance().init(this);
AnalyticsManager.getInstance().debugMode(BuildConfig.DEBUG);
if (BuildConfig.DEBUG) …Run Code Online (Sandbox Code Playgroud) 我正在使用 systrace 分析我的 React Native 应用程序。当我选择丢帧时,主要有两个警报
昂贵的措施/布局通行证
描述:测量/布局花费了大量时间,导致卡顿。避免在动画期间触发布局。
调度延迟
描述:生成此帧的工作被推迟了几毫秒,导致卡顿。确保 UI 线程上的代码不会阻塞其他线程上正在完成的工作,并且后台线程(例如执行网络或位图加载)在 android.os.Process#THREAD_PRIORITY_BACKGROUND 或更低级别运行,因此它们不太可能中断用户界面线程。这些后台线程应该以 130 或更高的优先级数出现在内核进程下的调度部分。
如果我收到类似这样的其他警报(例如要遵循的任何方法),我如何确定可以优化的位置以及如何进行?
我在我的android studio项目上运行systrace以找到一些性能错误但是在跟踪过程结束后,我得到以下错误,如果我在chrome中打开trace.html输出文件,则跟踪视图为空:
Starting tracing (10 seconds)
Tracing completed. Collecting output...
Exception in thread Thread-13:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 801, in __bootstrap_inner
self.run()
File "C:\Python27\lib\threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "C:\Users\Steli\AppData\Local\Android\sdk\platform-tools\systrace\catapult\systrace\systrace\tracing_agents\atrace_agent.py", line 194, in _collect_and_preprocess
self._trace_data = self._preprocess_trace_data(trace_data)
File "C:\Users\Steli\AppData\Local\Android\sdk\platform-tools\systrace\catapult\systrace\systrace\tracing_agents\atrace_agent.py", line 272, in _preprocess_trace_data
trace_data = strip_and_decompress_trace(trace_data)
File "C:\Users\Steli\AppData\Local\Android\sdk\platform-tools\systrace\catapult\systrace\systrace\tracing_agents\atrace_agent.py", line 332, in strip_and_decompress_trace
trace_data = zlib.decompress(trace_data)
error: Error -5 while decompressing data: incomplete or truncated stream
Outputting Systrace results...
Tracing complete, writing results
Traceback (most …Run Code Online (Sandbox Code Playgroud) 无法选择主时钟域,因为找不到从“SYSTRACE”到“LINUX_FTRACE_GLOBAL”的路径。
由于我无法在和找到该文件,如何访问systrace.py本地 android sdk 文件夹?/tools/platform-tools
下面是我的本地计算机上安装的当前 SDK 的图像。
以下是当前内容的图片,可供参考。
performance android android-sdk-tools systrace android-sdk-manager