如何使用Threads优化android代码

时间:2015-12-03 09:21:01

标签: java android multithreading optimization

我的Activity加载约3-5秒(太长时间)。 如何使用新的Threads优化我的OnCreate方法? 或者这里有其他方法来优化我的代码?

我尝试创建新的Threads,但在访问Objects时始终遇到问题,这些问题是在工作Thread中生成的。

这是我的OnCreate代码:

  if (getIntent().getBooleanExtra(EXIT_KEY, false)) {
            finish();
        }

        super.onCreate(savedInstanceState);

        if (savedInstanceState != null) {
            mSignInProgress = savedInstanceState
                    .getInt(SAVED_PROGRESS, STATE_DEFAULT);
        }

        // Setting Content View
        setContentView(R.layout.activity_main);

        mClient = buildGoogleApiClient();
        settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE);
        settingsVK = getSharedPreferences(VK_PREFERENCES, MainActivity.MODE_PRIVATE);

// Load Navigation Drawer
        getDrawer(
                settingsVK.getString(VK_INFO_KEY, ""),
                settingsVK.getString(VK_EMAIL_KEY, "")
        );

        if (getIntent().getBooleanExtra(JUST_SIGNED_KEY, false))
            initDialog_share();

        // Get and set system services & Buttons & SharedPreferences & Requests
        inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);

        vk_sign_out = (CustomView) findViewById(R.id.vk_sign_out);

        if (!settingsVK.getBoolean(VK_SIGNED_KEY, false)) {
            vk_sign_out.setEnabled(false);
        }

// VK sign out button
        vk_sign_out.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                settings
                        .edit()
                        .putBoolean(SIGNED_IN_KEY, false)
                        .putString(PROFILE_PHOTO_LOCATION_KEY, "")
                        .apply();

                startActivity(new Intent(MainActivity.this, FirstLaunchActivity.class)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

                finish();
            }
        });

2 个答案:

答案 0 :(得分:0)

您应该考虑使用ViewStub - 它充当占位符,并在调用ViewStub#inflate()时替换为您的实际布局。如果布局复杂,这将减少您的活动启动时间。你也可以在onResume()而不是onCreate()中加入任何昂贵的方法调用来加快速度。

ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();

答案 1 :(得分:0)

使用Android AsyncTasks执行此类任务,您还可以使用onPostExecute()方法访问UI视图。多个启动的asyncTasks按顺序执行是默认的,但您可以使用executeOnExecutor以真正的并行方式执行多个独立任务( )。 尝试在WWW上阅读有关Android UI到非UI线程通信的内容。 希望这有助于让你凝视......