2017-04-08 23 views
10

Aby zainicjować interfejs API Tłumacza Google, należy go wykonać w wątku. Zazwyczaj zajmuje to tylko 2 sekundy. Jednak 1 na 5 razy zajmuje to od 20 sekund do 3 minut (niedopuszczalne).Google Translate API czasami zajmuje bardzo dużo czasu, aby zainicjować

AppCompatActivity gdzie zainicjować Google Translate API

 AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() { 

     @Override 
     public void onPostExecute (Void aVoid) { 

      Log.i("APP", "finished initializing"); 

     } 

     @Override 
     protected Void doInBackground(Void... voids) { 
      Log.i("APP", "started initializing"); 
      translate2 = TranslateOptions.newBuilder().setApiKey(MY_API_KEY).build().getService(); 

      return null; 
     } 

    }; 
    asyncTask.execute(); 

Gradle

Mam też ostatnią wersję w moim Gradle (moduł):

compile ('com.google.apis:google-api-services-translate:v2-rev49-1.22.0') 

Note

Kiedyś działa natychmiast, ten błąd jest bardzo aktualny. Nie jestem pewien, dlaczego tak się dzieje z nikąd.

+0

Jak jesteś profilowanie jakie konkretne bloki kodu wziąć jak dużo czasu, aby uruchomić? Czy to jest tak, że twoja cała obsługa żądań trwa tak długo? – Nick

+0

Tak, całe wykonanie zadania AsynctTask trwa tak długo z inicjalizacją tłumaczenia wewnątrz funkcji DoInBackground, dzienniki na stronie DoInBackground i Post Execute śledzą, jak długo trwa ta jedna linia kodu. @Nick – grant

+0

Biorąc pod uwagę profil czasowy zdarzenia, może to być po prostu przypadek pogorszenia połączenia między klientem a serwerem. Czy to nadal występuje? Czy dzieje się to konsekwentnie, czy tylko przez większość czasu/przez jakiś czas? A jak klient łączy się z siecią? Czy pojawiło się to na wielu klientach? – Nick

Odpowiedz

1

Spróbuj wymienić

asyncTask.execute(); 

z

asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

asyncTask.execute (Execute) metoda działa w trybie seryjnym, czy jakiekolwiek inne zadanie asynchroniczny został wykonany przed nim & że zadanie jest nadal uruchomione, a następnie będzie czekać na zakończenie drugiego asynchronicznego zadania.

Gdzie jak executeOnExecutor potrwa asynctasks równolegle

+0

Próbowałem już tego, problem nadal istnieje, może to być wina serwera Google. – grant

+1

@grant Może to naprawdę wina Google'a ze strony serwera, ponieważ korzystam z interfejsu API Google Nearby, które musi połączyć się z Google, aby działać, a kilka dni temu spowodowało awarię usługi Google Play w około 95% przypadków, gdy próbowałem mój kod. Dzisiaj mój kod powoduje tylko awarię API w 10% przypadków. A mój kod się nie zmienił. – trinity420

Powiązane problemy