2012-12-20 14 views
6

Rozpoczynam nowe działanie z dwoma parametrami.Dlaczego metoda onNewIntent (intent intent) jest wywoływana dwa razy?

Intent intent = new Intent(WebTestActivity.this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);     
Uri uri = Uri.parse(url); 
intent.setData(uri); 
startActivity(intent); 

i złapać uri w onNewIntent metody.

@Override 
public void onNewIntent(Intent intent) { //calls twice 
    super.onNewIntent(intent);  
    Uri uri = intent.getData(); 
    new AsynkTask().execute(uri); 
} 

    } 

Ale metoda onNewIntent nazywa się dwukrotnie z jakiegoś nieznanego powodu, który nie wydaje się być w porządku.

+1

co to jest AsynkTask(). – njzk2

+0

co chcesz po prostu zamiar ..? przeanalizuj intencje .. – QuokMoon

+0

Igor, czy możesz mi powiedzieć, na jakim urządzeniu znalazłeś ten problem? Mogę go odtworzyć tylko na emulatorze Genymotion, ale nie na innych urządzeniach (S3, S4, Galaxy Nexus z 4.0.4, Nexus 7 z 4.3) –

Odpowiedz

0
Intent intent = new Intent(WebTestActivity.this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);     
intent.putExtra("url",url); 
startActivity(intent) 

W MainActivity;

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Bundle extras = getIntent().getExtras(); 
    String url = extras.getString(url); 

} 

Następnie można przeanalizować adres URL i użyć jako Uri. W ten sposób metoda nie zostanie wywołana dwukrotnie.

0

onNewIntent (Intent intent) Nazywa się to na działania, które wyróżniają launchMode do "singleTop" w ich opakowaniu, lub jeśli klient stosowanych flagę FLAG_ACTIVITY_SINGLE_TOP Dzwoniąc startActivity (intent).

Jeśli jest wywoływana dwa razy, musi zostać wywołana niezamierzona: rozpoczęcie działania dwa razy? Lub ręcznie wywołanie metody?

Powiązane problemy