我已经用创建字体的线程编写了 函数 ,稍后通过处理程序将这些字体分配给文本视图。我在 onCreate 方法中调用了此 功能 。所以我想知道在onCreate方法中使用线程调用函数是否是一个很好的编程习惯。它会影响我的应用程序的性能。
另外,我没有注意到使用这些线程可以提高性能。这是我的代码:
public class MainActivity extends Activity {
TextView quickFactTitle, quickFactText, plioceneTitle, plioceneMya,
plioceneInfo, mioceneTitle, mioceneMya, mioceneInfo;
Typeface font, nFont, ntFont;
EditText searchBox;
LinearLayout toPlioList;
Intent i;
Handler textFontHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
applyFonts();
return true;
}
});
/* Handler textFontHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
applyFonts();
}
};*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Initialize();
i = new Intent(MainActivity.this, CreatureList.class);
initFonts();
// applyFonts();
}
public void openPlioList(View v) {
i.putExtra("listType", 1);
startActivity(i);
}
private void initFonts() {
Runnable fontR = new Runnable() {
@Override
public void run() {
font = Typeface.createFromAsset(getAssets(), "Fonts/futuristic.TTF");
nFont = Typeface.createFromAsset(getAssets(), "Fonts/quicksand_book.otf");
ntFont = Typeface.createFromAsset(getAssets(), "Fonts/quicksand_bold.otf");
textFontHandler.sendEmptyMessage(0);
}
};
Thread fontThread = new Thread(fontR);
fontThread.start();
}
private void applyFonts() {
quickFactTitle.setTypeface(font);
plioceneTitle.setTypeface(ntFont);
mioceneTitle.setTypeface(ntFont);
quickFactText.setTypeface(nFont);
plioceneInfo.setTypeface(nFont);
mioceneInfo.setTypeface(nFont);
}
public void Initialize() {
quickFactTitle = (TextView) findViewById(R.id.quick_fact_title);
quickFactText = (TextView) findViewById(R.id.quick_fact_text);
plioceneInfo = (TextView) findViewById(R.id.pliocene_info_txt);
plioceneTitle = (TextView) findViewById(R.id.pliocene_title_txt);
plioceneMya = (TextView) findViewById(R.id.pliocene_mya_txt);
mioceneTitle = (TextView) findViewById(R.id.miocene_title_txt);
mioceneInfo = (TextView) findViewById(R.id.miocene_info_txt);
mioceneMya = (TextView) findViewById(R.id.miocene_mya_txt);
searchBox = (EditText) findViewById(R.id.search_box);
toPlioList = (LinearLayout) findViewById(R.id.to_plioList);
}
}
答案 0 :(得分:0)
首先,请注意使用线程并不会提高应用的整体速度。实际上使用它们只会降低应用程序的速度。作为一个注释,您应该使用尽可能少的线程来创建应用程序。
那么,当它们有用时?无论何时您想要执行I / O操作,线程都很有用,这会在等待I / O操作完成时浪费CPU周期。 I / O操作包括:
结论:线程使用不当会降低应用的性能。
在您的情况下,我不确定createFromAsset
是否应该在后台线程中完成。当我刚刚查看docs时,我对背景线程一无所知。
但是,如果您确定应该在后台线程中完成,那么您使用线程的方式就可以了IMO。