2012-06-15 4 views
0

내 앱이 처음 실행될 때 작동하지만 잠시 백그라운드에서 백그라운드로 남아있는 경우 사용자가 다시 실행하면 RuntimeException이 발생합니다. "활동을 시작할 수 없습니다. ComponentInfo ... 오류를 발생시키는 클래스입니다. 파편".배경에서 돌아온 후에 작업을 시작할 수 없습니다.

활동에 ListView가 포함 된 조각이 포함되어 있습니다. ListView에는 ImageView와 두 개의 TextView가 포함 된 사용자 지정 어댑터가 있습니다.

응용 프로그램이 백그라운드에서 실행되고 다른 많은 응용 프로그램이 사용 된 후에 활동으로 돌아 왔을 때 오류가 발생합니다. 이는 내 장치에서만 에뮬레이터에서 발생하지 않으므로 메모리 문제라고 생각합니다. .

어떻게이 예외를 피할 수 있습니까? 여기

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 

활동한다 :

<?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> 
: 여기
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 레이아웃입니다 내가 백그라운드에서 오랜만에 응용 프로그램을 다시 시작한 후 다음

는 로그 캣입니다

답변

2

귀하의 스택 트레이스는 아마 처음으로, 당신이 바로 스레드에서 네트워크에 액세스하지만, 두 번째로 복귀 한 후, 네트워크가 여기처럼, UI 스레드에서 액세스 할 수 있음을 의미

Caused by: android.os.NetworkOnMainThreadException 

를 말한다 :

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

대단히 감사합니다. 나는 첫 번째 오류가주의를 기울이는 것이라고 생각하면서 잘못된 logcat을 읽고 있었다. 나는 다음 번에 더 경계해야 할 것이다. –

0

메모리 문제가 될 것이라고 말했듯이 응용 프로그램에서 포커스를 잃었을 때 안드로이드가 안 좋거나 그렇지 않을 수도 있습니다 (리소스 가용성에 달려 있음) 응용 프로그램에서 사용하는 메모리를 해제합니다. onPause() 함수에서 활동 상태를 저장해야하므로 onResume() 함수에서이를 복원 할 수 있습니다.

관련 문제