活动第二个查找视图ById() 调用在应用重启后返回 null



我已经检查了StackOverFlow上的所有场景,但没有用。

简单地说,我已经实现了这个崩溃后自动重启教程,它运行良好。

我的应用程序中有不同的活动,如果应用程序崩溃并重新启动,则所有活动都会正常重新启动。 除了一个。

这是ConceptActivity中的(onCreate.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_concept);
    txtOurStory = (TextView) findViewById(R.id.txtOurStory);
    txtOurVision = (TextView) findViewById(R.id.txtOurVision);
    MyConfig config = Web.getConfig(); //retrieve data from server
    txtOurStory.setText(config.ConceptStory);
    txtOurVision.setText(config.ConceptVision);       
}

activity_concept.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView
                android:id="@+id/txtOurStory"
                style="@style/concept_text" />
            <TextView
                android:id="@+id/txtOurVision"
                style="@style/concept_text" />
        </LinearLayout>
    </ScrollView>
</RelativeLayout>

代码在第一次运行时运行良好,但如果从崩溃重新启动,findviewbyid 返回 null ..我正在其他活动中使用确切的步骤/代码,但没有发生。我尝试了几乎所有在堆栈溢出上找到的解决方案,只要场景相似,仍然没有。

有什么想法吗?提前非常感谢

更新

来自日志猫的错误

05-24 16:02:20.356 22368-22368/com.company.appname E/art: Throwing OutOfMemoryError "Failed to allocate a 48024300 byte allocation with 16777216 free bytes and 36MB until OOM"
05-24 16:02:20.366 22368-22368/com.company.appname E/AndroidRuntime: FATAL EXCEPTION: main
                                                                      Process: com.company.appname, PID: 22368
                                                                      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.company.appname/com.company.appname.MenuActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class <unknown>
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
                                                                          at android.app.ActivityThread.access$900(ActivityThread.java:177)
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                          at android.os.Looper.loop(Looper.java:145)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5942)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at java.lang.reflect.Method.invoke(Method.java:372)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
                                                                       Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class <unknown>
                                                                          at android.view.LayoutInflater.createView(LayoutInflater.java:640)
                                                                          at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
                                                                          at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689)
                                                                          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)
                                                                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
                                                                          at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:428)
                                                                          at android.app.Activity.setContentView(Activity.java:2267)
                                                                          at com.company.appname.MenuActivity.onCreate(MenuActivity.java:31)
                                                                          at android.app.Activity.performCreate(Activity.java:6288)
                                                                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) 
                                                                          at android.app.ActivityThread.access$900(ActivityThread.java:177) 
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                          at android.os.Looper.loop(Looper.java:145) 
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5942) 
                                                                          at java.lang.reflect.Method.invoke(Native Method) 
                                                                          at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
                                                                       Caused by: java.lang.reflect.InvocationTargetException
                                                                          at java.lang.reflect.Constructor.newInstance(Native Method)
                                                                          at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
                                                                          at android.view.LayoutInflater.createView(LayoutInflater.java:614)
                                                                          at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                                                                          at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) 
                                                                          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748) 
                                                                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
                                                                          at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:428) 
                                                                          at android.app.Activity.setContentView(Activity.java:2267) 
                                                                          at com.company.appname.MenuActivity.onCreate(MenuActivity.java:31) 
                                                                          at android.app.Activity.performCreate(Activity.java:6288) 
                                                                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) 
                                                                          at android.app.ActivityThread.access$900(ActivityThread.java:177) 
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                          at android.os.Looper.loop(Looper.java:145) 
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5942) 
                                                                          at java.lang.reflect.Method.invoke(Native Method) 
                                                                          at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
                                                                       Caused by: java.lang.OutOfMemoryError: Failed to allocate a 48024300 byte allocation with 16777216 free bytes and 36MB until OOM
                                                                          at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                                          at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                                                          at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:726)
                                                                          at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:547)
                                                                          at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1014)
                                                                          at android.content.res.Resources.loadDrawableForCookie(Resources.java:3747)
                                                                          at android.content.res.Resources.loadDrawable(Resources.java:3620)
                                                                          at android.content.res.TypedArray.getDrawable(TypedArray.java:762)
                                                                          at android.widget.ImageView.<init>(ImageView.java:151)
                                                                          at android.widget.ImageView.<init>(ImageView.java:140)
                                                                          at android.widget.ImageView.<init>(ImageView.java:136)
                                                                          at java.lang.reflect.Constructor.newInstance(Native Method) 
                                                                          at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
                                                                          at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
                                                                          at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                                                                          at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) 
                                                                          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748) 
                                                                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
                                                                          at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
                                                                          at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:428) 
                                                                          at android.app.Activity.setContentView(Activity.java:2267) 
                                                                          at com.company.appname.MenuActivity.onCreate(MenuActivity.java:31) 
                                                                          at android.app.Activity.performCreate(Activity.java:6288) 
                                                                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) 
                                                                          at android.app.ActivityThread.access$900(ActivityThread.java:177) 
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                          at android.os.Looper.loop(Looper.java:145) 
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5942) 
                                                                          at java.lang.reflect.Method.invoke(Native Method) 
                                                                          at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

txtOurStory ID 在布局文件中不可用。

确保您在 Java 中使用的所有 ID 都必须在布局文件中可用。

错误地更改此行 ID

txtOurStory = (TextView) findViewById(R.id.txtOurMission);
txtOurVision = (TextView) findViewById(R.id.txtOurVision);
自从

我遵循@Prashant的评论/建议以来,这个问题似乎从未发生过:

这是内存不足异常,您需要分析为什么您的应用程序 正在使用如此多的内存,并在不需要时尝试释放它们。 分析内存堆。我想你的布局中可能有图像 没有 18 被 MenuActivity 使用.java其分辨率可能更大。

确实浏览了我的应用程序并更改了导致此异常的图像加载库,因此从那时起该应用程序从未崩溃,因此我无法真正弄清楚这是否是问题的解决方案。 但似乎确实如此。

最新更新