"java.lang.RuntimeException: Unable to instantiate activity " 应用无法启动并显示空白屏幕



我是安卓系统的新手。我一直在做一个简单的应用程序。此应用程序只有一个活动。活动包含一个按钮。单击按钮时会显示吐司文本。

以下是我的activity_main.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/Text_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Hello World!"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.528"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.375" />
<Button
android:id="@+id/changeText_Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textSize="24sp"
android:background="#FFC0CB"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.568"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.641" />

</androidx.constraintlayout.widget.ConstraintLayout>

这是我的MainActivity.kt文件

package com.androidcreate.myexperimentsapp
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
var text : TextView = findViewById(R.id.Text_textView)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button : Button = findViewById(R.id.changeText_Button)

button.setOnClickListener {
changeText()
}
}
private fun changeText() {
val toast = Toast.makeText(
applicationContext,
"This is a message displayed in a Toast",
Toast.LENGTH_SHORT
)
toast.show()
}
}

当我运行该应用程序时,该应用程序不会加载。我显示了一个空白的黑色屏幕。以下是logcat:

=com.google.android.gms/com.google.android.location.internal.server.HardwareArProviderService }: process is bad
2020-09-14 13:57:42.606 556-580/? I/ActivityManager: Exiting empty application process 0:com.google.android.gms.persistent/u0a102 (null)
2020-09-14 13:57:42.610 556-577/? E/ActivityManager: Failure starting process com.google.android.gms.persistent
java.lang.SecurityException: Package com.google.android.gms is currently frozen!
at com.android.server.pm.PackageManagerService.checkPackageStartable(PackageManagerService.java:4451)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:1757)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:2319)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:2441)
at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3148)
at com.android.server.am.ActiveServices.bringUpServiceLocked(ActiveServices.java:2946)
at com.android.server.am.ActiveServices.bindServiceLocked(ActiveServices.java:2062)
at com.android.server.am.ActivityManagerService.bindIsolatedService(ActivityManagerService.java:15158)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1833)
at android.app.ContextImpl.bindServiceAsUser(ContextImpl.java:1783)
at com.android.server.ServiceWatcher.rebind(ServiceWatcher.java:339)
at com.android.server.ServiceWatcher.onBestServiceChanged(ServiceWatcher.java:310)
at com.android.server.ServiceWatcher.onBindingDied(ServiceWatcher.java:391)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1950)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1986)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.os.HandlerThread.run(HandlerThread.java:67)
at com.android.server.ServiceThread.run(ServiceThread.java:44)
2020-09-14 13:57:42.610 556-577/? I/ActivityManager: Force stopping com.google.android.gms appid=10102 user=0: start failure
2020-09-14 13:57:42.611 556-577/? I/ActivityManager:   Force stopping service ServiceRecord{946b99 u0 com.google.android.gms/com.google.android.location.network.NetworkLocationService}
2020-09-14 13:57:42.612 556-577/? W/ActivityManager: Unable to launch app com.google.android.gms/10102 for service Intent { act=com.android.location.service.v3.NetworkLocationProvider cmp=com.google.android.gms/com.google.android.location.network.NetworkLocationService }: process is bad
2020-09-14 13:57:42.613 556-580/? I/ActivityManager: Exiting empty application process 0:com.google.android.gms.persistent/u0a102 (null)
2020-09-14 13:57:42.617 556-577/? E/ActivityManager: Failure starting process com.google.android.gms.persistent
java.lang.SecurityException: Package com.google.android.gms is currently frozen!
at com.android.server.pm.PackageManagerService.checkPackageStartable(PackageManagerService.java:4451)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:1757)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:2319)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:2441)
at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3148)
at com.android.server.am.ActiveServices.bringUpServiceLocked(ActiveServices.java:2946)
at com.android.server.am.ActiveServices.bindServiceLocked(ActiveServices.java:2062)
at com.android.server.am.ActivityManagerService.bindIsolatedService(ActivityManagerService.java:15158)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1833)
at android.app.ContextImpl.bindServiceAsUser(ContextImpl.java:1783)
at com.android.server.ServiceWatcher.rebind(ServiceWatcher.java:339)
at com.android.server.ServiceWatcher.onBestServiceChanged(ServiceWatcher.java:310)
at com.android.server.ServiceWatcher.onBindingDied(ServiceWatcher.java:391)
at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1950)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1986)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.os.HandlerThread.run(HandlerThread.java:67)
at com.android.server.ServiceThread.run(ServiceThread.java:44)
2020-09-14 13:57:42.617 556-577/? I/ActivityManager: Force stopping com.google.android.gms appid=10102 user=0: start failure
2020-09-14 13:57:42.618 556-577/? I/ActivityManager:   Force stopping service ServiceRecord{d84426a u0 com.google.android.gms/com.google.android.location.fused.FusedLocationService}
2020-09-14 13:57:42.618 556-577/? W/ActivityManager: Unable to launch app com.google.android.gms/10102 for service Intent { act=com.android.location.service.FusedLocationProvider cmp=com.google.android.gms/com.google.android.location.fused.FusedLocationService }: process is bad
2020-09-14 13:57:42.622 556-577/? E/ActivityManager: Failure starting process com.google.android.gms.persistent
java.lang.SecurityException: Package com.google.android.gms is currently frozen!
at com.android.server.pm.PackageManagerService.checkPackageStartable(PackageManagerService.java:4451)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:1757)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:2319)
at com.android.server.am.ProcessList.startProcessLocked(ProcessList.java:2441)

请帮帮我。谢谢

首先,确保您已经在manifest.xml文件中注册了您的活动,类似于:

<application
..........................
..........................
..........................
..........................
..........................
..........................>

<activity android:name=".mainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>

然后,由于activity_main.xml中的视图与setContentView(R.layout.activity_main)中的Activity类连接,因此在创建Text_textView视图之前访问它是在犯错误。

如果您需要将视图作为属性(在本例中为类范围变量(,那么您可以遵循以下方法:

  1. 只需使用Kotlin视图扩展功能(最简单的方法(
  2. 将属性标记为延迟初始化或延迟初始化
  3. 将属性标记为可为null的类型(错误的方法(

Kotlin视图扩展功能

哪一个是最优雅的解决方案,您可以直接在活动中通过其id访问任何视图,例如,您可以使用其idchangeText_Button:立即访问按钮


//***Delete the line below***.
var text : TextView = findViewById(R.id.Text_textView)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//***Delete the line below***.
val button : Button = findViewById(R.id.changeText_Button)

changeText_Button.setOnClickListener {
changeText()
}
}

使用惰性初始化:

在这种方法中,属性(局部变量(第一次访问时会有值,而不是在声明站点中,所以通过这种方式,我们可以将视图作为全局属性,例如:


val text : TextView by lazy { findViewById(R.id.Text_textView) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
...
}

最新更新