Java Android-嵌套处理程序/可运行
我的应用程序内容部分有太多的代码。大约有3000行XML代码。这导致我的应用程序启动缓慢。(大约8秒钟后启动)我将内容放在6个viewstub对象中。我创造了很多处理程序。这是个问题吗?它的层次结构正确吗?如何在任务中执行所有这些处理程序操作 还有,我如何使我的内容更轻巧、更快 提前谢谢Java Android-嵌套处理程序/可运行,java,android,performance,Java,Android,Performance,我的应用程序内容部分有太多的代码。大约有3000行XML代码。这导致我的应用程序启动缓慢。(大约8秒钟后启动)我将内容放在6个viewstub对象中。我创造了很多处理程序。这是个问题吗?它的层次结构正确吗?如何在任务中执行所有这些处理程序操作 还有,我如何使我的内容更轻巧、更快 提前谢谢 new Handler().postDelayed(new Runnable() { @Override public void run() { vie
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewStubPager.setLayoutResource(R.layout.viewstubpager);
coachStubPager = viewStubPager.inflate();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewStub1.setLayoutResource(R.layout.viewstub1);
coachStub1 = viewStub1.inflate();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
viewStub2.setLayoutResource(R.layout.viewstub2);
coachStub2 = viewStub2.inflate();
viewStub3.setLayoutResource(R.layout.viewstub3);
coachStub3 = viewStub3.inflate();
viewStub4.setLayoutResource(R.layout.viewstub4);
coachStub4 = viewStub4.inflate();
viewStub5.setLayoutResource(R.layout.viewstub5);
coachStub5 = viewStub5.inflate();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Objects.requireNonNull(notificationManager).cancelAll();
sharedPreferencesKeys();
initialize();
calculate();
sharedPrefStartup();
alertDialogClickListener();
changeListener();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
layouts = new int[]{R.layout.vki_slide1, R.layout.vki_slide2, R.layout.vki_slide3, R.layout.vki_slide4, R.layout.vki_slide5, R.layout.vki_slide6, R.layout.vki_slide7, R.layout.vki_slide8, R.layout.vki_slide9};
VKIPagerAdapter = new MyViewPagerAdapter();
vkipager.setAdapter(VKIPagerAdapter);
VKIPagerAdapter.notifyDataSetChanged();
vkipager.setOffscreenPageLimit(10);
vkipager.addOnPageChangeListener(viewPagerPageChangeListener);
pageIndicator.setCount(layouts.length);
pageIndicator.setSelection(0);
bottombar.setVisibility(View.VISIBLE);
}
}, 100);
}
}, 100);
}
}, 100);
}
}, 100);
}
}, 150);
有点晚了,但这可能会帮助其他人 我不知道在我提出的解决方案中,问题中的代码是否会启动得更快(我怀疑会是这样),但是,它的可读性更高,并且只使用一个可运行的。这也可以用于动画 我根据以下答案得出了这个例子:
有点晚了,但这可能会帮助其他人 我不知道在我提出的解决方案中,问题中的代码是否会启动得更快(我怀疑会是这样),但是,它的可读性更高,并且只使用一个可运行的。这也可以用于动画 我根据以下答案得出了这个例子:
这真的很难读。是否需要将延迟值(100150ms)传递给
处理程序#postDelayed
<代码>处理程序#post的工作方式类似,但没有明显的延迟。它还可能有助于使用定义良好的参数创建Runnable
的命名实例。然后我将创建一个处理程序启动器并设置/膨胀ViewStub。当一个处理程序结束时(100毫秒),我将启动另一个处理程序。这会是个问题吗@解释延迟是有问题的,因为它们引入了竞争条件。不同硬件和软件的性能往往不一致,因此很难精确计时。最好以阻塞的方式执行关键的UI工作。你能举个例子吗@TomGoogle有一些关于指令插入和性能UI()的详细文档。仅从这段代码片段来看,不清楚Runnable/code block占用了多少时间,因此很难建议优化什么。这确实很难阅读。是否需要将延迟值(100150ms)传递给处理程序#postDelayed
<代码>处理程序#post的工作方式类似,但没有明显的延迟。它还可能有助于使用定义良好的参数创建Runnable
的命名实例。然后我将创建一个处理程序启动器并设置/膨胀ViewStub。当一个处理程序结束时(100毫秒),我将启动另一个处理程序。这会是个问题吗@解释延迟是有问题的,因为它们引入了竞争条件。不同硬件和软件的性能往往不一致,因此很难精确计时。最好以阻塞的方式执行关键的UI工作。你能举个例子吗@TomGoogle有一些关于指令插入和性能UI()的详细文档。仅从这个代码片段来看,还不清楚Runnable/code block占用了多少时间,因此很难建议优化什么。
Handler mHandler = new Handler();
int inflater = YOUR_CONSTANT_1;
void yourFunction() {
// ...your first inflater code here...
mHandler.postDelayed(mRunnable, your_delay_in_millis);
}
Runnable mRunnable = new Runnable() {
@Override
public void run() {
switch(inflater) {
case YOUR_CONSTANT_1 : {
// ...your second inflater code here...
inflater = YOUR_CONSTANT_2;
mHandler.postDelayed(mRunnable, your_delay_in_millis);
break;
}
case YOUR_CONSTANT_2 : {
// ...your third inflater code here...
inflater = YOUR_CONSTANT_3;
mHandler.postDelayed(mRunnable, your_delay_in_millis);
break;
}
// etcetera
case YOUR_CONSTANT_LAST : {
// ...your last inflater code here...
// in your final case, you could opt to remove callbacks
mHandler.removeCallbacks(mRunnable);
break;
}
}
}
};