Java 在onCreate方法中使用线程调用函数可以吗?
我用线程编写了一个函数,该函数创建字体,然后通过处理程序将这些字体分配给文本视图。我在onCreate方法中调用了这个函数。所以我想知道在onCreate方法中使用线程调用函数是否是一种好的编程实践。它会影响我的应用程序的性能吗 而且,我没有注意到使用这些线程在性能上有任何改进。这是我的密码:Java 在onCreate方法中使用线程调用函数可以吗?,java,android,multithreading,performance,Java,Android,Multithreading,Performance,我用线程编写了一个函数,该函数创建字体,然后通过处理程序将这些字体分配给文本视图。我在onCreate方法中调用了这个函数。所以我想知道在onCreate方法中使用线程调用函数是否是一种好的编程实践。它会影响我的应用程序的性能吗 而且,我没有注意到使用这些线程在性能上有任何改进。这是我的密码: public class MainActivity extends Activity { TextView quickFactTitle, quickFactText, plioceneTitl
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);
}
}
首先,请注意,使用线程不会提高应用程序的总体速度。实际上,使用它们只会降低应用程序的速度。请注意,您应该尽可能少地创建线程数的应用程序 那么,它们什么时候有用?每当您想要执行I/O操作时,线程都很有用,这会在等待I/O操作完成时浪费CPU周期。I/O操作包括:
- 文件I/O
- 网络I/O
- 等等
在您的情况下,我不确定是否应该在后台线程中执行
createFromAsset
。正如我刚刚签出的,我没有看到任何关于背景线程
但是,如果您确定应该在后台线程中执行,那么您使用线程的方式在IMO中是可以的。请显示一些代码。这是可以的,就像您添加了代码一样。IMO,线程也应该在其他情况下使用,而不仅仅是用于I/O。因为现代设备有多个cpu核,你可以充分利用线程的所有处理能力,例如,对于CPU密集型处理(例如位图解码),你可以同时执行多个操作,而不是必须按顺序执行,从而加快应用程序的速度。我同意asker对线程的使用有点可疑。