Androidにおいて、例外が発生した場合のライフサイクルについて教えて頂きたいです。
下記のように、例えばMainActivity ⇒ SubActivityと遷移するアプリがあり、SubActivity側で例外が発生してしまった場合に、SubActivityが破棄され、表面上はMainActivityに戻ったように見えますがMainActivityで参照しているシングルトンなクラスオブジェクトが例外発生後ではインスタンスが変わってしまいます。
Logcat上では[D/AndroidRuntime: Shutting down VM ]のように出力され、例外が発生した場合は一度VMがシャットダウンされるのかなと言うのは予想がつきました。
そこで質問なのですが、例外が発生した場合のライフサイクルについて、どのようなシーケンスをたどるのか教えて頂きたいのです。Webで探したのですがなかなか見つからず、もし良いサイト等あれば教えていただきたいです。
以上、よろしくお願いします。
02-26 22:35:37.866 22074-22074/com.example.xxxxx.exceptionapp D/AndroidRuntime: Shutting down VM
02-26 22:35:37.866 22074-22074/com.example.xxxxx.exceptionapp W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40d55ae0)
02-26 22:35:37.866 22074-22074/com.example.xxxxx.exceptionapp E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: なんかエラー
at com.example.shinyahosokawa.exceptionapp.SubActivity$1.onClick(SubActivity.java:37)
at android.view.View.performClick(View.java:4278)
at android.view.View$PerformClick.run(View.java:17430)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5092)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
at dalvik.system.NativeStart.main(Native Method)
Java
1 2public class MainActivity extends Activity { 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 10 Button b = (Button) findViewById(R.id.call_sub1); 11 b.setOnClickListener( 12 new View.OnClickListener() { 13 @Override 14 public void onClick(View v) { 15 Intent i = new Intent(getBaseContext(), SubActivity.class); 16 startActivity(i); 17 } 18 } 19 ); 20 21 22 Button singleton = (Button) findViewById(R.id.showsingleton); 23 singleton.setOnClickListener( 24 new View.OnClickListener() { 25 @Override 26 public void onClick(View v) { 27 int hash = SingletonClass.getInstance().hashCode(); 28 Toast.makeText(getBaseContext(), "singleton#hash: " + hash, Toast.LENGTH_SHORT).show(); 29 } 30 } 31 ); 32 33 } 34} 35
Java
1public class SubActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_sub); 7 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 8 setSupportActionBar(toolbar); 9 10 11 Button b = (Button) findViewById(R.id.button); 12 b.setOnClickListener( 13 new View.OnClickListener() { 14 @Override 15 public void onClick(View v) { 16 throw new RuntimeException("なんかエラー"); 17 } 18 } 19 ); 20 21 22 } 23 24}
Java
1public class SingletonClass { 2 3 private static SingletonClass _instance; 4 5 public static final SingletonClass getInstance() { 6 if (_instance == null) { 7 _instance = new SingletonClass(); 8 } 9 return _instance; 10 } 11 12 private SingletonClass() { 13 // private for singleton 14 } 15 16}

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。