Middle
Deep link səbəbindən fəaliyyətin bir neçə dəfə açılması vəziyyətini necə idarə etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Bir neçə yanaşma mövcuddur:
-
Intentdə bayraqların istifadəsi:
FLAG_ACTIVITY_SINGLE_TOP: Əgər fəaliyyət artıq yığımın yuxarısındadırsa, yeni nümunə yaradılmaq əvəzinəonNewIntent()metodu çağırılacaq.FLAG_ACTIVITY_CLEAR_TOP: Əgər fəaliyyət artıq yığında mövcuddursa, onun üstündəki bütün fəaliyyətlər sonlandırılacaq və fəaliyyət yuxarıya gətiriləcək.FLAG_ACTIVITY_NEW_TASKilə birlikdə: Bu, çox vaxtCLEAR_TOPilə başqa bir tapşırıqdan fəaliyyətlərlə işləmək üçün istifadə olunur.
-
AndroidManifest.xml-də
launchModekonfiqurasiyası:singleTop:Intentvasitəsilə başladıqdaFLAG_ACTIVITY_SINGLE_TOP-a bənzər.singleTask: Fəaliyyət yeni tapşırığın köküdür; əgər artıq bir nümunə mövcuddursa, o önə çəkiləcək və onun üstündəki bütün fəaliyyətlər sonlandırılacaq.singleInstance: Fəaliyyət öz tapşırığında mövcuddur və bu tapşırıqda yeganə fəaliyyətdir.
-
Fəaliyyətin mövcudluğunu yoxlamaq:
ActivityManageristifadə edərək hazırkı fəaliyyət yığını yoxlayın. Bu yanaşma mürəkkəbliyi və xərcləri səbəbindən daha az tövsiyə olunur.
-
onNewIntent()-ə cavab:singleTopvə yaFLAG_ACTIVITY_SINGLE_TOPistifadə edildikdə, deeplinkin işlənməsi üçün bütün məntiqonNewIntent()-də həyata keçirilməlidir,onCreate()-də yox.setIntent(intent)-ionNewIntent()-də çağırmağı unutmayın ki,getIntent()vasitəsilə əlçatan olan Intent yenilənmiş olsun.
launchMode="singleTop" və onNewIntent() nümunəsi:
AndroidManifest.xmldə:
<activity
android:name=".YourDeeplinkActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="your_scheme"
android:host="your_host"
android:pathPrefix="/your_path" />
</intent-filter>
</activity>
YourDeeplinkActivity sinifində:
class YourDeeplinkActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_deeplink)
// Başlanğıc emal, fəaliyyət yaradıldıqda
handleIntent(intent)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
// Intent-i yeniləmək vacibdir
setIntent(intent)
// Yeni Intent-i emal et (deeplink)
handleIntent(intent)
}
private fun handleIntent(intent: Intent?) {
intent?.data?.let { uri ->
// Deeplink URI-ni emalamaq məntiqi
Log.d("DeeplinkActivity", "Qəbul edilən deeplink: $uri")
// Məsələn, parametrləri çıxar və uyğun fragmentə yönləndirmə et
}
}
}
Yanaşma seçimi konkret ssenariyə və istənilən fəaliyyət yığını davranışına bağlıdır. Ən çox istifadə olunan həll, launchMode="singleTop" istifadə etmək və onNewIntent()-də işləməkdir.