优化android onCreate方法

时间:2015-12-03 01:17:35

标签: java android performance android-fragments android-activity

我的应用程序中有seveal actvities,但在它们之间切换太长。我在这样的活动之间切换:

onClick(View v) {
    startActivity(new Intent(FirstLaunchActivity.this, MainActivity.class));
    finish();
}

新活动的onCreate

super.onCreate(savedInstanceState);

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

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

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

        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, "")
        );

/** GOOGLE **/
        mSignInButoon = (SignInButton) findViewById(R.id.sign_in_button);
        mSignInButoon.setOnClickListener(this);

        mSignOutButton = (Button) findViewById(R.id.sign_out_button);
        mSignOutButton.setOnClickListener(this);
/****/

        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);
        vk_sign_out.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AsyncTask<Void, Void, Void>() {
                    @Override
                    protected void onPreExecute() {
                        startActivity(new Intent(MainActivity.this, FirstLaunchActivity.class)
                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
                        finish();
                    }

                    @Override
                    protected Void doInBackground(Void... params) {
                        settings
                                .edit()
                                .putBoolean(SIGNED_IN_KEY, false)
                                .putString(PROFILE_PHOTO_LOCATION_KEY, "")
                                .apply();
                        settingsVK
                                .edit()
                                .putString(VK_PHOTO_KEY, "")
                                .putString(VK_EMAIL_KEY, "")
                                .putString(VK_INFO_KEY, "")
                                .putBoolean(VK_SIGNED_KEY, false)
                                .apply();

                        return null;
                    }

                    @Override
                    protected void onPostExecute(Void aVoid) {
                        super.onPostExecute(aVoid);
                    }
                }.execute();
            }
        });

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

我使用了AsyncTaskTheads,但仍需要等待太久。我如何优化我的代码?

1 个答案:

答案 0 :(得分:0)

无需每次都完成活动。

例如

第1,2,3,4页是注册用户的应用程序

当我要开始第2页时,我只是startActivity,无需调用完成。 如果我调用backbuttonPressed()函数,那么每件事都可以。 (super.backbuttonPressed()已经包含finish()) 我不需要重置第1页并轻松使用它。

如果我完成了page4注册并想要返回主页面, 我将调用startActivity(page1)并在此之后调用finish page4。