我的主要活动的布局主要由用作按钮的图像组成。使用Percent Relative Layout
图像本身是我的drawable文件夹中的.png文件。我们假设它们是压缩格式,每个大约120到140kb。
我认为这与屏幕上的太多图像同时存在,但很奇怪发现当装载在一台屏幕尺寸只有我的三星GS7的3岁设备上时,它可以使用最小的滞后。 logcat甚至几乎没有任何帧率跳过。
目前的理论是,更高分辨率的屏幕可能会吸引更多资源,但GS7上的内存应该使旧设备相形见绌。
另外,仿真器就像垃圾一样运行。比任何物理设备慢100倍,所以我不打扰它。
以编程方式,唯一发生的事情是每个onClickListener
ImageView
。页面上没有其他工作要做。
XML
<android.support.percent.PercentRelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/abc"
android:textSize="27sp"
android:id="@+id/textMainTitle"
android:layout_gravity="center"
android:layout_alignParentTop="true"
android:textColor="#ffffff"
android:gravity="center_horizontal" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="def"
android:id="@+id/textMainSubTitle"
android:layout_gravity="center_horizontal"
android:layout_below="@id/textMainTitle"
android:gravity="center_horizontal" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:src="@drawable/1"
app:layout_widthPercent="33%"
android:layout_below="@id/textMainSubTitle"
android:adjustViewBounds="true"
/>
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:src="@drawable/2"
app:layout_widthPercent="33%"
android:layout_below="@id/textMainSubTitle"
android:layout_toRightOf="@id/btn1"
android:adjustViewBounds="true"
/>
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/btn3"
android:src="@drawable/3"
app:layout_widthPercent="33%"
android:layout_below="@id/textMainSubTitle"
android:layout_toRightOf="@id/btn2"
android:adjustViewBounds="true"
/>
// Other buttons removed. But there are six rows each with
// 3 button as there are above
相关Java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
btn1 = (ImageView) findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(getApplicationContext(), activity1.class));
}
});
btn2 = (ImageView) findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(getApplicationContext(), activity2.class));
}
});
btn3 = (ImageView) findViewById(R.id.btn3);
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(getApplicationContext(), activity2.class));
}
});
//As in the XML layout, all other buttons have been removed for visual
logcat的
I/Choreographer: Skipped 31 frames! The application may be doing too much work on its main thread.
I/Choreographer: Skipped 38 frames! The application may be doing too much work on its main thread.
//and so on.
感谢任何建议或协助。谢谢
答案 0 :(得分:1)
在主线程上加载所有这些图像是不好的。您应该异步加载它们。使用图片加载库,例如Glide或Picasso。它们通常用于从远程源下载和显示图像,但它们也可以很好地处理本地异步加载。
让我们为btn1
执行异步图片加载。使用Glide(因为这是我最喜欢的),它可能不容易:
Glide.with(this) // any Context subclass, depending on lifecycle needs
.load(R.drawable.1)
.into(btn1)
为所有ImageViews
执行此操作,您就是金色的。不要忘记删除android:src = ...
xml属性。
至于模拟器的迟缓,如果您使用的是Windows和支持VT的Intel CPU,请从SDK管理器下载并安装“Intel x86 Emulator Accelerator(HAXM安装程序)”。确保在BIOS中启用了VT-x。
答案 1 :(得分:0)
这就是为什么在主线程上加载图像是个坏主意的原因。屏幕将滞后(或跳过帧)。考虑到您加载的图像数量,图像大小为120kb(每个)太多了。
将图像保存在服务器上并使用异步任务检索它们。
答案 2 :(得分:0)
startActivity(new Intent(getApplicationContext(), activity1.class));
to
startActivity(new Intent(ActivityName.this, activity1.class));
//与其他两项活动相同!