Obecná diskuze o vývoji[Vyřešeno] Jak počkat na dokončení Thread

Moderátor: mArtinko5MB

Odpovědět
Uživatelský avatar

Autor tohoto vlákna
misebo
Stálý androiďák
Příspěvky: 80
Registrován: pon 15. črc 2013 10:12:53
Reputace: 1
Typ mobilu / ROM: THL A3
Tablet: Lenovo A7-50 [LENOVO A3500-H]
Rom: Android 4.2.2, 4.4.2
Kontaktovat uživatele:

[Vyřešeno] Jak počkat na dokončení Thread

Příspěvek od misebo » čtv 23. úno 2017 18:22:09

Mám následující kód:

Kód: Vybrat vše

public class MainService extends Service {
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	
	@Override
	public void onStart(Intent intent, int startid) {
		Toast.makeText(this, "onStart", Toast.LENGTH_LONG).show();
		
		try {
			Toast.makeText(this, "Pred", Toast.LENGTH_LONG).show();
			get("/config");
			Toast.makeText(this, "Po", Toast.LENGTH_LONG).show();
		} catch(Exception e) {
			Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
		}
	}
	
	private void get(final String request) {
		Thread t = new Thread(new Runnable() {
			@Override
			public void run() {
				new Handler(Looper.getMainLooper()).post(new Runnable() {
					public void run() {
						Toast.makeText(MainService.this, "Pokus", Toast.LENGTH_LONG).show();
					}
				});
			}
		});
		t.start();
		try {
			t.join();
		} catch(Exception e) {
			Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
		}
	}
}
Očekával bych, že se Toasty budou ukazovat v pořadí:
  • onStart
    Pred
    Pokus
    Po
ale ukazují se v tomto pořadí:
  • onStart
    Pred
    Po
    Pokus
Kompiluji přes AIDE.
V čem dělám chybu?
Naposledy upravil(a) misebo dne čtv 23. úno 2017 23:17:02, celkem upraveno 1 x.



martinflorek
Androiďák!
Příspěvky: 481
Registrován: ned 05. čer 2011 7:04:44
Reputace: 7

Re: Jak počkat na dokončení Thread

Příspěvek od martinflorek » čtv 23. úno 2017 22:06:39

Ukazuju sa v spravnom poradi. Beh jedneho vlakna necaka na spustenie a beh ineho vlakna. To by potom vlakno nemalo zmysel.

Uživatelský avatar

Autor tohoto vlákna
misebo
Stálý androiďák
Příspěvky: 80
Registrován: pon 15. črc 2013 10:12:53
Reputace: 1
Typ mobilu / ROM: THL A3
Tablet: Lenovo A7-50 [LENOVO A3500-H]
Rom: Android 4.2.2, 4.4.2
Kontaktovat uživatele:

Re: Jak počkat na dokončení Thread

Příspěvek od misebo » čtv 23. úno 2017 22:33:26

Jak tedy můžu počkat na dokončení činnosti vlákna? Jsem myslel, že stačí, jak mám t.join(), kde t je to vlákno, ale asi teda nestačí...

EDIT: Přes Log jsem zjistil, že to dělá jen uvnitř Handleru, protože když Log.d(...) dám mimo Handler, všechny logy se vypíší ve správném pořadí (když ke každému Toastu přidám Log)

EDIT 2: A jelikož Toast zevnitř Threadu tvořit nepotřebuji, můžu ten Handler zcela smazat a mám po problému. Účel, pro který to používám, to plní :)


martinflorek
Androiďák!
Příspěvky: 481
Registrován: ned 05. čer 2011 7:04:44
Reputace: 7

Re: [Vyřešeno] Jak počkat na dokončení Thread

Příspěvek od martinflorek » pát 24. úno 2017 21:46:29

Neplni to ucel lebo stale blokujes hlavne vlakno. Je sice pekne, ze nastartujes nove vlakno a v nom urobis pracu, ale pokial donutis hlavne vlakno pockat na skoncenie tvojho vlakna, tak to mozes rovno spravit na hlavnom vlakne. Efekt je uplne rovnaky -> aplikacia na chvilu zamrzne.

Hlavne vlakno nikdy neblokuj, vzdy ho nechaj bezat dalej. Ked dobehne tvoje vlakno, tak posli jeho vysledok spat do hlavneho vlakna. Najjednoduchsie to mas s AsyncTask.

Uživatelský avatar

Autor tohoto vlákna
misebo
Stálý androiďák
Příspěvky: 80
Registrován: pon 15. črc 2013 10:12:53
Reputace: 1
Typ mobilu / ROM: THL A3
Tablet: Lenovo A7-50 [LENOVO A3500-H]
Rom: Android 4.2.2, 4.4.2
Kontaktovat uživatele:

Re: [Vyřešeno] Jak počkat na dokončení Thread

Příspěvek od misebo » ned 26. úno 2017 22:46:58

Máš pravdu, teď o tom tak přemýšlím, že na dokončení vlákna vlastně ani čekat nemusím (aplikaci jsem mezi položením dotazu a tvojí odpovědí upravil a zjednodušil a nějak mě nenapadlo, že bych mohl odebrat čekání) ;)

Odpovědět

Zpět na „Obecná diskuze o vývoji“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů