Middle
Deep link sababli faoliyat bir necha marta ochilsa, qanday boshqarish mumkin?
sobes.tech AI
AIdan javob
Bir nechta yondashuvlar mavjud:
-
Intentdagi bayroqlardan foydalanish:
FLAG_ACTIVITY_SINGLE_TOP: Agar faoliyat allaqachon yigining yuqorisida bo'lsa, yangi nusxa yaratish o'rnigaonNewIntent()usuli chaqiriladi.FLAG_ACTIVITY_CLEAR_TOP: Agar faoliyat allaqachon yilda mavjud bo'lsa, uning ustidagi barcha faoliyatlar yakunlanadi va faoliyat yuqori qismga olib kelinadi.FLAG_ACTIVITY_NEW_TASKbilan birgalikda: Ko'pinchaCLEAR_TOPbilan boshqa vazifadan faoliyatlar bilan ishlash uchun ishlatiladi.
-
AndroidManifest.xml'da
launchModesozlamasi:singleTop:Intentorqali ishga tushirilgandaFLAG_ACTIVITY_SINGLE_TOPga o'xshash.singleTask: Faoliyat yangi vazifaning ildizi; agar allaqachon bir nusxa mavjud bo'lsa, u oldinga olib kelinadi va uning ustidagi barcha faoliyatlar yakunlanadi.singleInstance: Faoliyat o'zining vazifasida mavjud va bu vazifadagi yagona faoliyat.
-
Faoliyat mavjudligini tekshirish:
ActivityManageryordamida joriy faoliyat yiginini tekshiring. Bu yondashuv murakkabligi va xarajatlari sababli kamroq tavsiya etiladi.
-
onNewIntent()ga javob berish:singleTopyokiFLAG_ACTIVITY_SINGLE_TOPishlatilganda, deeplinkni ishlash mantiqionNewIntent()da amalga oshirilishi kerak,onCreate()da emas.setIntent(intent)chaqirishni unutmang, shundagetIntent()orqali kirish mumkin.
launchMode="singleTop" va onNewIntent() misoli:
AndroidManifest.xmlda:
<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 faoliyat sinfida:
class YourDeeplinkActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_deeplink)
// Dastlabki ishlov berish, faoliyat yaratilganda
handleIntent(intent)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
// Intentni yangilash muhim
setIntent(intent)
// Yangi Intentni ishlash (deeplink)
handleIntent(intent)
}
private fun handleIntent(intent: Intent?) {
intent?.data?.let { uri ->
// Deeplink URI'sini ishlash mantiqi
Log.d("DeeplinkActivity", "Qabul qilingan deeplink: $uri")
// Masalan, parametrlarni chiqarib, kerakli fragmentga navigatsiya qilish
}
}
}
Yondashuv tanlovi aniq holatga va istalgan faoliyatlar yiginidagi xulq-atvorga bog'liq. Eng keng tarqalgan yechim, launchMode="singleTop" ni ishlatish va onNewIntent()da ishlashdir.