gpt4 book ai didi

android - Activity 转换缓慢 : multiple "initializing inflate state" in LogCat

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:05:22 26 4
gpt4 key购买 nike

为了在我的 ListActivity 中提供自定义字体,我根据这个例子写了一个类 CustomAdapter 扩展 BaseAdapter here .

但是,如那里所述,我编写了 getView() 方法,如下所示:

public View getView(int position, View convertView, ViewGroup parent){
String gameName = gameNames[position]; // gameName ist the String[] of the Custom Adapter

TextView tv = new TextView(context);
tv.setText(gameName);
tv.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/gulim.ttf"));

return tv;
}

这按预期工作。唯一令人不安的是,列表显示大约需要三四秒钟(在这种情况下这是很长的时间)。但是,在 ListActivity 中,我将 onItemClickListener 设置如下:

private void setOnItemClickListener(){
getListView().setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int pos, long id){
onClickEntryButton(((TextView) view).getText().toString());
}
});
}

private void onClickEntryButton(String gameName){
Intent intent = new Intent(this, GameActivity.class);
intent.putExtra("gameName", gameName);
startActivity(intent);
finish();
}

现在,当点击 ListItem 时,GameActivity 打开需要更多时间。此 Activity 只是一对 TextView,其中填充了从 SQLite 数据库中获取的信息。同样在这里,我为每个 TextView 设置了自定义字体。即使屏幕变黑 2-3 秒(出现应用程序崩溃),也会发生这种情况,然后新的 Activity 出现。从应用程序的其他位置访问该 Activity 不会发生这种情况。

在这两种情况下 - 访问 ListActivity 并从 ListActivity 访问 GameActivity - 几个

"szipinf - Initializing inflate state"

消息出现在 LogCat 中。在这种情况下它们是什么意思?将 onItemClickListener 设置到我的 CustomAdaptergetView() 方法中会更好吗?似乎有什么东西真的抑制了转换,但我不知道是什么,因为没有什么大的东西需要计算或处理(事实上,在 SQLite 数据库中恰好有两个条目,每 5 个字段)?

编辑如果需要或需要,我当然可以提供更多代码。

最佳答案

我有完全相同的问题,你的问题给了我答案!

我仍然不知道确切的根本原因,但这个问题是因为在我的案例中多次从 Assets 中读取自定义字体。如果我的屏幕上有 10 个小部件,并且每个小部件都使用自定义字体,Android 每次都会从 Assets 中加载它。这不仅导致我的 Activity 转换变慢,而且在玩了多次后还导致崩溃。

所以我为我的字体创建了一个缓存,以避免每次都从 Assets 中获取字体。

我在实用程序类中添加了这段代码:

private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();

public static final String ASSET_PATH="assetPath";

public static Typeface getFont(Context c, String assetPath) {
synchronized (cache) {
if (!cache.containsKey(assetPath)) {
try {
Typeface t =(Typeface.createFromAsset(c.getAssets(),
"fonts/arial.ttf"));
cache.put(assetPath, t);
} catch (Exception e) {
return null;
}
}
return cache.get(assetPath);
}
}

我创建了我的自定义类来设置字体

public class MyButton extends Button {

public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}

public MyButton(Context context) {
super(context);
}

@Override
public void setTypeface(Typeface tf) {

super.setTypeface(Util.getFont(getContext(), Util.ASSET_PATH));
}

}

变量 assetPath 可用于在运行时提供不同的字体

编辑:Here是我创建的自定义 typefaceManager 库,以使其更通用。

关于android - Activity 转换缓慢 : multiple "initializing inflate state" in LogCat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com