안녕하세요. 도움을 주셔서 감사합니다.회전 중 "활동을 파괴 할 수 없습니다 ... onSaveInstanceState 이후에이 작업을 수행 할 수 없습니다"
로테이션 처리를위한 코드 구성의 시작 부분에 불과합니다. onDestroy()를 구현했지만 아직 onSaveInstanceState() 또는 onRetainNonConfigurationInstance()를 구현하지 않은 이유는 파괴 된 경우 문제가 발생하지 않을 것으로 생각했기 때문입니다. 회전 후 다시 만들고 무엇을 구해야 하는가?
내 응용 프로그램에서 AsyncTask를 실행하는 서비스와 사용자가 단추를 누르면 교환되는 3 개의 조각을 사용합니다.
조각을 관리하기 위해 호환성 라이브러리를 사용합니다.
내가 만난 오류가 조각과 관련되어 있다고 의심됩니다.
구체적으로, 내가 조각을 선호 파괴 및 회전에 다시, 오히려 그 수를 유지
(이것이 내 코드를 간단하게 것이 나의 희망 ...이기 때문에) 에뮬레이터를 회전시켜 제목에 오류가 발생합니다.
이 주요 활동의 코드는 다음과 같습니다
public class Quotes extends FragmentActivity {
private String url2;
//public String responseBody;
public static ArrayList<Stock> lt;
public static ArrayList<Stock> best;
public static ArrayList<Stock> worst;
public static ArrayList<Stock> fav;// =new ArrayList<Stock>();
public static LocalService mService;
boolean mBound;// = false;
public MyAdapter myAdap;
public Messenger messenger;
public Messenger messenger2;
public Grab g;
public static Handler handler;
public static Handler handler2;
public Intent intent;
public ListView lv;
public dettagliofragment fragment;
public listafragment fragmentlista ;
public static boolean tablet;//=true;
public static WorstBest worstbest;
public static favouritesFragment fragmentfavourites;
public static FragmentActivity fragmentActivity;
public static int stack;
public static ArrayList<Integer> stackArray; // stackArray =new ArrayList<Integer>();
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
stackArray =new ArrayList<Integer>();
fav =new ArrayList<Stock>();
tablet=true;
mBound = false;
fragmentActivity = this;
setContentView(R.layout.splash);
url2=getString(R.string.url2);
g = new Grab(url2);
String s = g.vai();
//Log.e("", s);
Log.e("", "passo oltre l'invocazione al grab");
lt = new MyParser(s).parseResp();
fragmentlista = new listafragment();
fragmentfavourites= new favouritesFragment() ;
worstbest = new WorstBest();
/////////////////primo message handler
handler=new Handler() {
@Override
public void handleMessage(Message msg) {
Message mess=msg;
Log.e("","MESSAGGIO RICEVUTO");
lt = mService.ritira();
Log.e("what?", Integer.toString(mess.what));
if(mess.what==0){
worst=mService.ritiraWorst();
best=mService.ritiraBest();
fav=mService.ritiraFav();
setContentView(R.layout.main);
View view1=(View)findViewById(R.id.view1);
View view2=(View)findViewById(R.id.view2);
if(view2==null) {tablet=false;};
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.view1, fragmentlista);
if(tablet){fragmentTransaction.add(R.id.view2, worstbest);}
fragmentTransaction.commit();
g.fermaGrab();
Log.e("", "fermograb");
};
}
};
messenger = new Messenger(handler);
intent = new Intent(this, LocalService.class);
intent.putExtra("messenger", messenger);
/////////////////secondo message handler
handler2=new Handler() {
@Override
public void handleMessage(Message msg) {
Message mess=msg;
Log.e("","SECONDO MESSAGGIO RICEVUTO");
lt = mService.ritira();
worst=mService.ritiraWorst();
best=mService.ritiraBest();
fav=mService.ritiraFav();
if(lt==null){Log.e("","lt è nullo");};
if(fragmentlista==null){Log.e("","fragmentlista è nullo");};
fragmentlista.prendiLista(lt);
worstbest.prendiListaWorst(worst);
worstbest.prendiListaBest(best);
if(fav.size()>0)fragmentfavourites.prendiLista(fav);
};
};
messenger2 = new Messenger(handler2);
intent.putExtra("messenger2", messenger2);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
public static void layoutSchermo(int conf){
if(conf==1){
FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
if(!tablet){fragmentTransaction.replace(R.id.view1, fragmentfavourites);}
if(tablet){fragmentTransaction.replace(R.id.view2, fragmentfavourites);}
fragmentTransaction.addToBackStack(null);
stack=fragmentTransaction.commit();
stackArray.add(stack);
Log.e("","stack = "+ Integer.toString(stack));
}
if(conf==2){
FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
if(!tablet){fragmentTransaction.replace(R.id.view1, worstbest);}
if(tablet){fragmentTransaction.replace(R.id.view2, worstbest);}
fragmentTransaction.addToBackStack(null);
stack= fragmentTransaction.commit();
stackArray.add(stack);
Log.e("","stack = "+ Integer.toString(stack));
}
}
@Override
public void onBackPressed(){
FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();
if(stackArray.size()>0)
{for(int i=1;i<stackArray.size();i++){
fragmentManager.popBackStackImmediate(stackArray.get(i), FragmentManager.POP_BACK_STACK_INCLUSIVE);}
}
super.onBackPressed();
}
protected void onStop() {
Log.e("onstop","passo per onstop");
mService.stop();
g.fermaGrab();
super.onStop();
}
protected void onPause() {
Log.e("onpause","passo per onpause");
mService.stop();
g.fermaGrab();
super.onPause();
}
protected void onDestroy() {
Log.e("ondestroy","passo per ondestroy");
mService.stop();
g.fermaGrab();
//handler.removeMessages(333);
stopService(intent);
//g=null;
FragmentManager fragmentManager = fragmentActivity.getSupportFragmentManager();
if(stackArray.size()>0)
{for(int i=1;i<stackArray.size();i++){
fragmentManager.popBackStackImmediate(stackArray.get(i), FragmentManager.POP_BACK_STACK_INCLUSIVE);}
}
super.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) { }
public static ArrayList<Stock> dammi(){
return lt;
}
public void inizia()
{
Log.e("","il serlizio è bound ? "+ mBound);
mService.prendi(lt);
mService.getNumber();
}
private ServiceConnection mConnection = new ServiceConnection() {
//@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
Log.e("", "sono in ServiceConnection");
// We've bound to LocalService, cast the IBinder and get LocalService instance
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
//inizia();
mService.prendi(lt);
mService.getNumber();
}
//@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
mService = null;
}
};
신은 내 로그 캣입니다 :
01-06 12:20:27.869: E/AndroidRuntime(2165): FATAL EXCEPTION: main
01-06 12:20:27.869: E/AndroidRuntime(2165): java.lang.RuntimeException: Unable to destroy activity {com.example.quotes/com.example.quotes.Quotes}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3273)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3291)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3489)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.ActivityThread.access$700(ActivityThread.java:130)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.os.Looper.loop(Looper.java:137)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-06 12:20:27.869: E/AndroidRuntime(2165): at java.lang.reflect.Method.invokeNative(Native Method)
01-06 12:20:27.869: E/AndroidRuntime(2165): at java.lang.reflect.Method.invoke(Method.java:511)
01-06 12:20:27.869: E/AndroidRuntime(2165): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-06 12:20:27.869: E/AndroidRuntime(2165): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-06 12:20:27.869: E/AndroidRuntime(2165): at dalvik.system.NativeStart.main(Native Method)
01-06 12:20:27.869: E/AndroidRuntime(2165): Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1314)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:480)
01-06 12:20:27.869: E/AndroidRuntime(2165): at com.example.quotes.Quotes.onDestroy(Quotes.java:201)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.Activity.performDestroy(Activity.java:5172)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1109)
01-06 12:20:27.869: E/AndroidRuntime(2165): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3260)
01-06 12:20:27.869: E/AndroidRuntime(2165): ... 12 more
어떤 도움 주셔서 감사합니다!
당신의 onConfigurationChanged() 나는 그 다음의 onConfigurationChanged 방법에서 그 코드를 작성들의 OnDestroy에서 조각을 다시 팝업을 alllowing되지 않은 경우 말을 의미 –
에 열세 코드를 전환 할 수 있습니다, 이것은 내가 의지 방향 변경 –
@ChangdeoJadhav에 호출됩니다 지금 당장 해봐. 덕분에 –