在onCreate方法中调用带有线程的函数是否可以?

时间:2015-12-25 07:16:32

标签: java android multithreading performance

我已经用创建字体的线程编写了 函数 ,稍后通过处理程序将这些字体分配给文本视图。我在 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);
    }
}

1 个答案:

答案 0 :(得分:0)

首先,请注意使用线程并不会提高应用的整体速度。实际上使用它们只会降低应用程序的速度。作为一个注释,您应该使用尽可能少的线程来创建应用程序。

那么,当它们有用时?无论何时您想要执行I / O操作,线程都很有用,这会在等待I / O操作完成时浪费CPU周期。 I / O操作包括:

  • 文件I / O。
  • 网络I / O。

结论:线程使用不当会降低应用的性能。

在您的情况下,我不确定createFromAsset是否应该在后台线程中完成。当我刚刚查看docs时,我对背景线程一无所知。

但是,如果您确定应该在后台线程中完成,那么您使用线程的方式就可以了IMO。