Задержка активности приложения при первом открытии на панели навигации - PullRequest
0 голосов
/ 14 ноября 2018

У меня проблема с активностью моего навигационного ящика. Когда я открываю это действие в первый раз с задержкой 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) {
    }

}

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

FYI

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

Этот код не требуется хранить внутри onPreExecute() хранить внутри onCreate()

Вы вызываете API в начале, что на самом деле не задержка, а время, необходимое для вызова API.

Используйте ProgressBar до тех пор, пока AsyncTask не будет завершен.

0 голосов
/ 14 ноября 2018

Я думаю, что вы выполняете некоторую блокирующую задачу в onPreexecute () вашего AsyncTask. Пожалуйста, измените 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);
    }
}

}

...