2012-06-15 104 views
0

我的應用程序在初始運行時工作,但如果它在後臺留下一段時間然後由用戶重新啓動,我得到一個RuntimeException「無法啓動活動ComponentInfo ...錯誤膨脹類分段」。無法在從後臺返回後啓動活動

該活動包含一個包含ListView的片段。 ListView具有包含ImageView和兩個TextView的自定義適配器。

當應用程序在後臺運行並且使用了很多其他應用程序時,如果返回活動,則會引發錯誤,這會導致我相信它存在內存問題,因爲這僅在我的設備上不會發生。

如何讓我的應用程序避免此異常?

這裏是logcat的後,我在後臺很長一段時間後,恢復應用程序:

06-15 18:48:41.886: E/AndroidRuntime(10033): FATAL EXCEPTION: main 
06-15 18:48:41.886: E/AndroidRuntime(10033): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.scl.tntmg/com.scl.tntmg.NowShowingActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class fragment 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.os.Looper.loop(Looper.java:137) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at java.lang.reflect.Method.invokeNative(Native Method) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at java.lang.reflect.Method.invoke(Method.java:511) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at dalvik.system.NativeStart.main(Native Method) 
06-15 18:48:41.886: E/AndroidRuntime(10033): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class fragment 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.Activity.setContentView(Activity.java:1835) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.scl.tntmg.NowShowingActivity.onCreate(NowShowingActivity.java:16) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.Activity.performCreate(Activity.java:4465) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
06-15 18:48:41.886: E/AndroidRuntime(10033): ... 11 more 
06-15 18:48:41.886: E/AndroidRuntime(10033): Caused by: android.os.NetworkOnMainThreadException 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at java.net.InetAddress.getAllByName(InetAddress.java:220) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.scl.tntmg.util.MovieGuideUtil.getData(MovieGuideUtil.java:118) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.scl.tntmg.util.MovieGuideUtil.refreshMovies(MovieGuideUtil.java:183) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.scl.tntmg.util.MovieGuideUtil.getMovies(MovieGuideUtil.java:82) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at com.scl.tntmg.ListFrag.onCreateView(ListFrag.java:49) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:845) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1058) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:289) 
06-15 18:48:41.886: E/AndroidRuntime(10033): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) 
06-15 18:48:41.886: E/AndroidRuntime(10033): ... 21 more 

這裏是活動:

public class NowShowingActivity extends FragmentActivity{ 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.nowshowing); 

    removeNotifications(); 
} 

public void onRestart(){ 
    super.onRestart(); 
} 

public void onStop(){ 
    super.onStop(); 
} 

public void onDestroy(){ 
    super.onDestroy(); 
} 

public void onResume(){ 
    super.onResume(); 
    removeNotifications(); 
} 

private void removeNotifications(){ 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
    mNotificationManager.cancel(1); 
} 

public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mgoptions,menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item){ 
    Intent myIntent; 
    switch(item.getItemId()){ 
     case R.id.theater_details: 
      myIntent = new Intent(this, TheaterActivity.class); 
      this.startActivity(myIntent); 
      return true; 
     case R.id.refresh: 
      myIntent = new Intent(this, HomeActivity.class); 
      this.startActivity(myIntent); 
      return true; 
     case R.id.about: 
      myIntent = new Intent(this, AboutActivity.class); 
      this.startActivity(myIntent); 
      return true; 
     case R.id.settings: 
      myIntent = new Intent(this, SettingActivity.class); 
      this.startActivity(myIntent); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

這裏是nowshowing佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" > 



<fragment class="com.scl.tntmg.ListFrag" 
     android:id="@+id/list" 
     android:layout_weight="1" 
     android:layout_width="0dp" android:layout_height="fill_parent" > 
    <!-- Preview: [email protected]/list --> 
</fragment> 

</LinearLayout> 

回答

2

你的堆棧跟蹤說

Caused by: android.os.NetworkOnMainThreadException 

這意味着,也許是第一次,你訪問網絡中正確的線程,但重啓後第二次,該網絡從UI線程訪問,就像這裏:

at com.scl.tntmg.util.MovieGuideUtil.getData(MovieGuideUtil.java:118) 
+0

這是正確的,非常感謝。我正在閱讀logcat不正確,認爲第一個錯誤是需要注意的錯誤。下次我會更加警惕。 –

0

正如你所說這將是一個內存問題,當你的應用程序失去焦點android可能會或可能不會(取決於資源的可用性)釋放您的應用程序使用的內存。因此,您應該將您的活動狀態保存在onPause()函數中,然後您可以在onResume()函數中恢復它。

相關問題