当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

android activity与viewpager+fragment的生命周期问题

发表于: 2015-05-21   作者:肆无忌惮_   来源:转载   浏览:
摘要: 有一个Activity里面是ViewPager,ViewPager里面放了两个Fragment。 第一次进入这个Activity。开启了服务,并在onResume方法中绑定服务后,对Service进行了一定的初始化,其中调用了Fragment中的一个属性。 super.onResume(); bindService(intent, conn, BIND_AUTO_CREATE);

有一个Activity里面是ViewPager,ViewPager里面放了两个Fragment。

第一次进入这个Activity。开启了服务,并在onResume方法中绑定服务后,对Service进行了一定的初始化,其中调用了Fragment中的一个属性。

		super.onResume();
		bindService(intent, conn, BIND_AUTO_CREATE);

		isSee = true;

		if (currentItem != null) {
			songName.setText(currentItem.getName());
		}
		if (isPlay) {
			iv.setImageResource(R.drawable.pause);
		}

		if (isPlay) {
			new Thread() {
				public void run() {
					while (binder == null) {
						try {
							Thread.sleep(1);
						} catch (InterruptedException e) {
						}
					}
					new ProgressThread().start();
fragment.initEqualizer();// 可能报空指针,其中fragment不为null。此方法里面就是一句话:
// mEqualizer = new Equalizer(0,((MusicActivity)getActivity()).binder.getAudioSessionId());
					fragment.mVisualizer.setEnabled(true);
					binder.setHandler(handler);
					handler		.sendEmptyMessage(MusicActivity.INIT_LRC);

				}
			}.start();
		}
	

 

第一次进入这个Activity很正常,返回后再进入就报空指针。

找了很久也不知道谁是null,后来发现只可能是getActivity(),可是第一次很正常,第二次才出错。

 

解决办法:

activity的生命周期执行完onResume之后,Fragment才开始被初始化。所以在线程中对fragment操作的时候,Fragment压根没和Activity绑定。

至于为什么第一次正常,没找到原因。

所以把要对binder设置的属性,放到fragment的onResume里面。

@Override
	public void onResume() {
		super.onResume();
		if (MusicActivity.isPlay) {
			new Thread() {
				public void run() {
					while (((MusicActivity) getActivity()).binder == null) {
						try {
							Thread.sleep(1);
						} catch (InterruptedException e) {
						}
					}
					setMax(((MusicActivity) getActivity()).binder.getLength());
					((MusicActivity) getActivity()).pb
							.setMax(((MusicActivity) getActivity()).binder
									.getLength());
					setProgress(((MusicActivity) getActivity()).binder
							.getCurrent());
					((MusicActivity) getActivity()).pb
							.setProgress(((MusicActivity) getActivity()).binder
									.getCurrent());
					initEqualizer();
					mVisualizer.setEnabled(true);
					((MusicActivity) getActivity()).binder.setHandler(handler);
					((MusicActivity) getActivity()).handler
							.sendEmptyMessage(MusicActivity.INIT_LRC);
				}
			}.start();
		}
	}

 就没null了。

android activity与viewpager+fragment的生命周期问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
大家好,今天给大家详解一下Android中Activity的生命周期,我在前面也曾经讲过这方面的内容,但是像
Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之
Activity状态: ① 当一个Activity 在屏幕的最上层时(对堆栈的最顶端),它就是属于active 或者run
之前也说过了解Android Activity是十分重要的,因为android的应用的生命周期是由android 系统决定的
启动程序 FirstActivity -------- onCreate() FirstActivity -------- onStart() FirstActivity ---
启动程序 FirstActivity -------- onCreate() FirstActivity -------- onStart() FirstActivity ---
Android Activity的生命周期 Activity类处于android.app包中,继承体系如下: 1.java.lang.Object 2
Android Activity的生命周期 Activity类处于android.app包中,继承体系如下: 1.java.lang.Object 2
onCreate之后就会执行onStart,此时画面已经显示出来了,但还不能交互;然后执行onResume,此时可以与
Android activity的生命周期 activity类处于android.app包中,继承体系如下: 1.java.lang.Object 2
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号