Android MainActivity's Oncreate () дважды вызов на начальный запуск после установкиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android MainActivity's Oncreate () дважды вызов на начальный запуск после установки

Сообщение Anonymous »

Проблема:
Я сталкиваюсь с необычной проблемой, в которой метод Oncreate () в области запуска моего приложения (MainActivity) вызывается дважды, но только тогда, когда я впервые запускаю приложение после установки (из общего звена Google Play или установки подписанного файла APK на устройство). Это поведение приводит к тому, что многочисленные экземпляры создания магистратуры одновременно. /> наблюдения: < /strong> < /p>

Эта проблема возникает только тогда, когда приложение запускается впервые после установки. < /li>
Последующие запуска приложения не проявляют этого поведения;
oncreate (). Первоначальная запуск, как и ожидается, что -то вроде ожидаемой. app
после установки. < /li>
Я тестирую в устройстве версии Android 13 < /li>
< /ul>
code: < /strong> < /p>
функция Androidmanifest.xml> < /p>
hous Aanddroidmanifest.xml










































< /code>
baseapplication < /p>
@FlowPreview
@ExperimentalCoroutinesApi
@HiltAndroidApp
open class BaseApplication : Application()
< /code>
mainActivity < /p>
@AndroidEntryPoint
class MainActivity : AppCompatActivity(), UIController {

@Inject
lateinit var editor: SharedPreferences.Editor

@Inject
lateinit var sharedPreferences: SharedPreferences

@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory

private val viewModel: SplashViewModel by viewModels {
viewModelFactory
}

private val signInLauncher = registerForActivityResult(
FirebaseAuthUIActivityResultContract()
) { res ->
this.onSignInResult(res)
}

@OptIn(FlowPreview::class, ExperimentalCoroutinesApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Toast.makeText(this, "oncreate called", Toast.LENGTH_SHORT).show()
setContent {
SplashProvider()
}
viewModel.hasSyncBeenExecuted()
.observe(this) { hasSyncBeenExecuted ->

if (hasSyncBeenExecuted) {
startActivity(Intent(this, RecipeActivity::class.java))
// Use lifecycleScope for the coroutine
lifecycleScope.launch {
delay(2000) // Adjust the delay time as needed
finish()
}
}
}
if (sharedPreferences?.getString(
PreferenceKeys.USER_UID,
null
) != null && FirebaseAuth.getInstance().currentUser != null
) {
viewModel.syncCacheWithNetwork()
} else {
createSignInIntent()
}
}

private fun createSignInIntent() {
// [START auth_fui_create_intent]
// Choose authentication providers
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build()
)
Toast.makeText(this, "createSignInIntent called", Toast.LENGTH_SHORT).show()
// Create and launch sign-in intent
val signInIntent = AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.setTheme(R.style.LoginTheme)
.setLogo(R.drawable.handshake) // Set logo drawable
.build()
signInLauncher.launch(signInIntent)
// [END auth_fui_create_intent]
}

override fun hideSoftKeyboard() {
if (currentFocus != null) {
val inputMethodManager = getSystemService(
Context.INPUT_METHOD_SERVICE
) as InputMethodManager
inputMethodManager
.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
}
}

private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
val response = result.idpResponse
if (result.resultCode == AppCompatActivity.RESULT_OK) {
// Successfully signed in
val user = FirebaseAuth.getInstance().currentUser
// ...
editor?.putString(PreferenceKeys.USER_UID, user?.uid)
editor?.apply()
viewModel.syncCacheWithNetwork()
} else if (response != null) {
Toast.makeText(
this,
response.error?.errorCode.toString().plus(response.error?.message),
Toast.LENGTH_LONG
).show()
} else {
finish()
}
}

}
< /code>
splashprovider < /p>
@Composable
fun SplashProvider(
) {
val images = listOf(R.drawable.splash1, R.drawable.splash2, R.drawable.splash3)
val imageIndex = Random.nextInt(images.size)

Splash(images[imageIndex])
}

@Composable
fun Splash(img: Int) {

Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Image(
contentDescription = "Recipe",
painter = painterResource(img),
modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop
)
Column(
modifier = Modifier
.wrapContentSize()
.clip(CircleShape)
.background(Color.Black.copy(alpha = 0.6f))
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
CircularProgressIndicator(
modifier = Modifier.size(50.dp),
strokeWidth = 4.dp,
color = Color.White
)
Spacer(modifier = Modifier.height(8.dp))
Text(
text = "Loading...",
color = Color.White,
fontSize = 16.sp
)
}

}
}


Подробнее здесь: https://stackoverflow.com/questions/770 ... -installin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»