- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Android应用程序的内容部分由大量的代码结构组成。 (3000行)我把它们分成3个viewstub。我启动了 3 个嵌套处理程序,然后膨胀了 View stub 。
但它并没有再次加速。它仍然打开得很慢。现在,在研究时,我遇到了asyntasklayoutinflater,但我认为我无法正确完成这项工作。内容中没有显示任何 View 。//我删除了setContentView 我也想将我的viewstubs移动到asynctask中,但它不是静态的,我该怎么做?你能帮忙吗?提前致谢!
ViewStub viewStub1;
ViewStub viewStub2;
ViewStub viewStub3;
View coachStub1;
View coachStub2;
View coachStub3;
@SuppressLint("InflateParams")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
new AsyncLayoutInflater(this).inflate(R.layout.activity_main, null, new AsyncLayoutInflater.OnInflateFinishedListener() {
@Override
public void onInflateFinished(@NonNull View view, int resid, @Nullable ViewGroup parent) {
long start = System.currentTimeMillis();
viewStub1 = view.findViewById(R.id.viewStub1);
viewStub2 = view.findViewById(R.id.viewStub2);
viewStub3 = view.findViewById(R.id.viewStub3);
viewStub1.setLayoutResource(R.layout.viewstub1);
coachStub1 = viewStub1.inflate();
viewStub2.setLayoutResource(R.layout.viewstub2);
coachStub2 = viewStub2.inflate();
viewStub3.setLayoutResource(R.layout.viewstub3);
coachStub3 = viewStub3.inflate();
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Objects.requireNonNull(notificationManager).cancelAll();
initialize(view);
new MainAsyncTask(MainActivity.this).execute();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
VKIPagerAdapter = new MyViewPagerAdapter();
vkipager.setAdapter(VKIPagerAdapter);
VKIPagerAdapter.notifyDataSetChanged();
vkipager.setOffscreenPageLimit(10);
vkipager.addOnPageChangeListener(viewPagerPageChangeListener);
long finish = System.currentTimeMillis();
Log.d("Handler Displayed", "\t" + (finish - start));
}
}, 100);
menu1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
///
}
});
inters_ad1 = new InterstitialAd(context);
inters_ad2 = new InterstitialAd(context);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (blink_settings && !MainActivity.this.isFinishing()) {
Animation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(500);
anim.setStartOffset(20);
anim.setRepeatMode(Animation.REVERSE);
anim.setRepeatCount(Animation.INFINITE);
profile.startAnimation(anim);
}
}
}, 8000);
}
});
}
异步任务
private static class MainAsyncTask extends AsyncTask<Integer, Integer, String> {
private WeakReference<MainActivity> activityWeakReference;
MainAsyncTask(MainActivity activity) {
activityWeakReference = new WeakReference<>(activity);
}
@Override
protected String doInBackground(Integer... integers) {
MainActivity activity = activityWeakReference.get();
activity.sharedPreferencesKeys();
activity.alertDialogClickListener();
activity.changeListener();
return "MainAsyncTask Worked!";
}
@Override
protected void onPostExecute(String s) {
Log.d("MainAsyncTask", "" + s);
}
}
初始化方法
private void initialize(View view) {
loadframe = view.findViewById(R.id.loadframe);
menu = view.findViewById(R.id.menu);
bottombar = view.findViewById(R.id.bottombar);
menu1 = view.findViewById(R.id.menu1);
pageIndicator = coachStub1.findViewById(R.id.pageIndicator);
vkisonuctw = coachStub1.findViewById(R.id.vkisonuctw);
numberpicker = coachStub2.findViewById(R.id.numberpicker);
radiogrouphareket = coachStub2.findViewById(R.id.radiogrouphareket);
belkalcasonuctw = coachStub3.findViewById(R.id.belkalcasonuctw);
belkalcasonuctwinfo = coachStub3.findViewById(R.id.belkalcasonuctwinfo);
// much more
}
最佳答案
你必须异步加载 View ,调用这个方法setcontentview(view)将其设置到activity
像这样:
new AsyncLayoutInflater(context).inflate(layout, null, new AsyncLayoutInflater.OnInflateFinishedListener() {
@Override
public void onInflateFinished(@NonNull View view, int resid, @Nullable ViewGroup parent) {
//load view into activity
activity.setContentView(view);
}
});
关于java - 我该如何做 AsyncLayoutInflater onCreate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60006139/
Android应用程序的内容部分由大量的代码结构组成。 (3000行)我把它们分成3个viewstub。我启动了 3 个嵌套处理程序,然后膨胀了 View stub 。 但它并没有再次加速。它仍然打开
“随着最近发布的 Android 支持库,第 24 版 Google 开发人员在 v4 库中加入了一个新的辅助类,用于布局的异步膨胀” 这是我的代码: Timber.e("Timeinflatio
我有一个自定义的 ViewGroup,我正试图将其异步膨胀,它因以下原因而崩溃:进程:com.xxx.xxx.debug,PID:9391 java.lang.IllegalStateExceptio
我目前使用 DataBindingUtil.inflate(inflater, layoutId, parent, attachToParent) 来膨胀我的大部分布局方法。 但我看到他们是一个Asy
在发现我的 onCreateView 花了将近一秒钟来执行 inflater.inflate(...) 方法后,我搜索了一下并找到了一个新的类, AsyncLayoutInflater。 我试图在我的
我已经编写了适合我需要的扩展函数: suspend fun AsyncLayoutInflater.inflateSuspended(@LayoutRes resid: Int, parent: Vi
我已经尝试将我的应用程序正在使用的 facebook sdk 升级到最新版本(5.1.1),它不知何故让我陷入了将我的项目迁移到 AndroidX 的困境。在完成迁移并解决了一些 gradle 问题之
我是一名优秀的程序员,十分优秀!