首页 > 解决方案 > 应用程序活动延迟在导航抽屉上首次打开时

问题描述

我的导航抽屉活动遇到问题。当我 第一次打开此活动时 ,它有 1-2 秒的延迟,当我再次打开它时,它变得更好(不完美但更好)。是因为它可能正在导入其他 API?我添加了一个异步任务,但仍然没有。

这是此活动的代码

public class ImportAPI extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
public TextView fullnameside, emailside;

public static String stravaToken;

public static ImageButton btnStrava;
public ImageView tickStrava;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.importapi);


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    toolbar.setTitle("");
    toolbar.setSubtitle("");

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    View headerView = navigationView.getHeaderView(0);
    fullnameside = (TextView) headerView.findViewById(R.id.fullnameside);
    emailside = (TextView) headerView.findViewById(R.id.emailside);
    fullnameside.setText(""+GetInfo.fullname);
    emailside.setText(""+GetInfo.email);

    navigationView.setNavigationItemSelectedListener(this);
    navigationView.getMenu().getItem(3).setChecked(true);

    //STRAVA
    tickStrava=(ImageView) findViewById(R.id.tickStrava);
    btnStrava=(ImageButton) findViewById(R.id.stravaBtn);
    new connectStrava().execute("start");

}

@SuppressLint("StaticFieldLeak")
class connectStrava extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        btnStrava.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent getStravaApi= new Intent(ImportAPI.this,StravaSetupApi.class);
                startActivity(getStravaApi);
            }
        });

        //GET ACCESS TOKEN FROM STRAVAS AUTHORIZE ACCOUNT
        String accessToken = StravaAuthenticateActivity.getStravaAccessToken(ImportAPI.this);
        stravaToken=accessToken; //make static var so i can use it anywhere i want

        //Get athletes activities from GetStravaAthleteActivities.java
        new GetStravaAthleteActivities.AthleteActivities();

        //check if token is null so i can display the tick and also disable the button press
        if(stravaToken!=null)
        {
            btnStrava.setEnabled(false);
            tickStrava.setVisibility(View.VISIBLE);
        }
        else {
            tickStrava.setVisibility(View.INVISIBLE);
        }
    }

    @Override
    protected String doInBackground(String... aurl) {
        Log.d("Alekos","TAK4");
        return null;

    }
    protected void onProgressUpdate(String... progress) {

        Log.d("ANDRO_ASYNC",progress[0]);

    }

    @Override
    protected void onPostExecute(String unused) {
    }

}

标签: androidnavigation-drawerdelay

解决方案


我认为您正在 AsyncTask 的 onPreexecute() 中执行一些阻塞任务。请修改您的 AsyncTask 如下。

class connectStrava extends AsyncTask<String, String, String> {

@Override
protected void onPreExecute() {
    super.onPreExecute();
    btnStrava.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent getStravaApi= new Intent(ImportAPI.this,StravaSetupApi.class);
            startActivity(getStravaApi);
        }
    });




}

@Override
protected String doInBackground(String... aurl) {
    //GET ACCESS TOKEN FROM STRAVAS AUTHORIZE ACCOUNT
    String accessToken = StravaAuthenticateActivity.getStravaAccessToken(ImportAPI.this);
    stravaToken=accessToken; //make static var so i can use it anywhere i want

    //Get athletes activities from GetStravaAthleteActivities.java
    new GetStravaAthleteActivities.AthleteActivities();
    return stravaToken;

}
protected void onProgressUpdate(String... progress) {

    Log.d("ANDRO_ASYNC",progress[0]);

}

@Override
protected void onPostExecute(String result) {
    //check if token is null so i can display the tick and also disable the button press
    if(stravaToken!=null)
    {
        btnStrava.setEnabled(false);
        tickStrava.setVisibility(View.VISIBLE);
    }
    else {
        tickStrava.setVisibility(View.INVISIBLE);
    }
}

}


推荐阅读