ユーザーがアプリケーションを閉じてからもう一度開くと、アプリケーションがクラッシュします。このクラスは、何らかの理由で、トラブルが発生します。Android:閉じると再開した後にアプリケーションがクラッシュする
public class PageFragment_Bon extends Fragment implements View.OnClickListener{
public static final String ARG_PAGE = "ARG_PAGE";
private int mPage;
private Button start, stop, replay;
private MediaPlayer mediaPlayer;
int [] filer = new int[18];
public static PageFragment_Bon newInstance(int page) {
Bundle args = new Bundle();
args.putInt(ARG_PAGE, page);
PageFragment_Bon fragment = new PageFragment_Bon();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPage = getArguments().getInt(ARG_PAGE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_boenner, container, false);
start = (Button) view.findViewById(R.id.start);
start.setOnClickListener(this);
stop = (Button) view.findViewById(R.id.stop);
stop.setOnClickListener(this);
replay = (Button) view.findViewById(R.id.replay);
replay.setOnClickListener(this);
filer[2] = R.raw.takbira;
filer[4] = R.raw.alfatiha;
filer[14] = R.raw.tashahhud;
filer[15] = R.raw.salat;
filer[16] = R.raw.assalam;
if(filer[mPage] != 0){
start.setVisibility(View.VISIBLE);
stop.setVisibility(View.VISIBLE);
replay.setVisibility(View.VISIBLE);
}
return view;
}
@Override
public void onPause() {
super.onPause();
if(mediaPlayer != null)
{
mediaPlayer.stop();
mediaPlayer.reset();
mediaPlayer.release();
}
}
@Override
public void onClick(View v) {
if(mediaPlayer == null)
mediaPlayer = MediaPlayer.create(getActivity().getBaseContext(), filer[mPage]);//add this line
if(v == start){
try {
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
else if(v == stop){
mediaPlayer.pause();
}
else if(v == replay){
mediaPlayer.seekTo(0);
mediaPlayer.start();
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(!isVisibleToUser){
if(mediaPlayer!=null) {
if (mediaPlayer.isPlaying()) {
try {
mediaPlayer.pause();
mediaPlayer.seekTo(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}
これは私がlogcatで得るものです:
05-07 13:56:06.726 31550-31550/com.app.hudhud.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.hudhud.myapp, PID: 31550
java.lang.RuntimeException: Unable to resume activity {com.app.hudhud.myapp/com.app.hudhud.myapp.Bon}: java.lang.IllegalStateException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4156)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.IllegalStateException
at android.media.MediaPlayer._start(Native Method)
at android.media.MediaPlayer.start(MediaPlayer.java:1425)
at com.app.hudhud.myapp.PageFragment_Bon.onResume(PageFragment_Bon.java:148)
at android.support.v4.app.Fragment.performResume(Fragment.java:2235)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1346)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:2898)
at android.support.v4.app.FragmentController.dispatchResume(FragmentController.java:223)
at android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:509)
at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:498)
at android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
at android.app.Activity.performResume(Activity.java:7016)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4145)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1839)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
これはなぜ起こるのでしょうか?私は何かを逃したか?アプリが閉じているときに、私が思うに、MediaPlayerのの状態が適切に処理されていない
なぜ再開アクティビティを呼び出すのですか?閉鎖時に元のものは破壊されてはいけませんか? –
閉じるとは、ユーザーがアプリを終了して最近の画面から「終了」しないことを意味します。 – Hudhud
アプリケーションのインスタンスが破棄されていない可能性がありますか?いくつかのアンドロイドのように、ホームボタンを押すと、アプリケーションは実際には閉じず、バックグラウンドで一時停止します。 –