2012-06-15 47 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()函数中恢复它。

相关问题