应用程序重新启动后,Activity第二个findViewById()调用返回null

时间:2017-05-24 12:49:20

标签: android

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

简单地说,我已经实现了这个auto-restart after crash教程,它完美无缺。

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

这是 ConceptActivity.java

中的(onCreate)
@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 ..我在其他活动中使用了确切的步骤/代码,但它没有发生。我尝试了几乎所有在stackoverflow上找到的解决方案,只要场景相似,仍然没有。

任何想法?非常感谢提前

更新

LogCat错误

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) 

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

更改此行ID错误

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

答案 2 :(得分:0)

似乎问题从未发生过,因为我关注@ Prashant的评论/建议:

  

这是内存不足异常,您需要分析您的应用程序的原因   正在使用如此多的内存,并在您不需要它时尝试释放它们。   分析内存堆。我猜你的布局中可能有图像在线   MenuActivity.java使用的18号分辨率可能更高。

我确实通过我的应用程序并更改了导致此异常的图像加载库,因此应用程序从未崩溃,因此我无法弄清楚这是否是解决问题的方法。但似乎是。