android - 首次在抽屉导航上打开时应用程序 Activity 延迟

标签 android navigation-drawer delay

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

这是此 Activity 的代码

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) {
    }

}

最佳答案

我认为您正在 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);
    }
}

}

关于android - 首次在抽屉导航上打开时应用程序 Activity 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53296437/

相关文章:

android - 项目的抽屉导航圆角背景

android - React Native - 如何使用抽屉导航管理 native 后退按钮

android - 注册即时消息用户

android - BuildConfig.java中的意外更改,无法还原

java - 折线未显示在 Api v2 android 上

JavaScript 计时与 CSS 计时

ffmpeg在不同时间多次叠加

android - 如何在 Android Studio 中将 javadoc 附加到 Google Play 服务?

android - fragment Activity 中的空指针异常

javascript - jQuery:带有通知功能的超时/延迟?