应用程序最小化后 onResume 不起作用
onResume does not work after app is minimized
我的其他一切工作正常,但是当我最小化该应用程序然后返回并尝试恢复时,我的图像按钮将无法播放与其关联的音频文件。我必须返回应用程序的开始屏幕并返回带有图像按钮的 activity 页面,才能让它们再次播放音频。任何提示都会有所帮助。
public class ColorPage extends AppCompatActivity {
Context context = this;
MediaPlayer media = null;
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(media!=null){
media.stop();
media.release();
media = null;
}
}
@Override
protected void onResume() {
super.onResume();
if(media == null) {
media.start();
}
}
@Override
protected void onPause() {
super.onPause();
if(media != null) {
media.pause();
media.release();
media = null;
}
}
这是我正在使用的代码。除了 onResume() 之外,其他一切似乎都有效。
我也使用了 if(media != null) 但它所做的只是导致每次打开 activity 页面时最后一个音频文件自动播放。 If(media == null) 只是我尝试的最后一件事。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color_page);
ImageButton pinkB = (ImageButton) findViewById(R.id.pinkButton);
ImageButton yellowB = (ImageButton) findViewById(R.id.yellowButton);
ImageButton purpleB = (ImageButton) findViewById(R.id.purpleButton);
ImageButton blueB = (ImageButton) findViewById(R.id.blueButton);
ImageButton greenB = (ImageButton) findViewById(R.id.greenButton);
ImageButton redB = (ImageButton) findViewById(R.id.redButton);
media = MediaPlayer.create(context, R.raw.purpleaudiotest);
purpleB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.purpleaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.blueaudiotest);
blueB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.blueaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.redaudiotest);
redB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.redaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.greenaudiotest);
greenB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.greenaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.yellowaudiotest);
yellowB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.yellowaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.pinkaudiotest);
pinkB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.pinkaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
这是 class ColorPage 的其余代码,所以我的问题更清楚了。
您在每个颜色按钮 onClick 中的检查仅在它不为空时才初始化媒体,(很奇怪)在这种情况下它也恰好是问题所在。您的 onPause 使媒体无效,并且 onResume 不会重新初始化它,因此 if (media!=null) 始终为 false,实际上,在那之后您可能会在 media.start() 上获得 npe。像这样处理点击。
if (media != null) {
media.stop();
media.release(); // release previous media if not null
}
// initialize this outside of the if block
media = MediaPlayer.create(context, R.raw.pinkaudiotest); // whatever color in each
media.start();
您已在 onPause 中将媒体设置为 null,假设您只想从音频停止 onResume 的地方开始。如果你不想自动启动,似乎根本没有实现 onResume 的意义。
@Override
protected void onResume() {
super.onResume();
if(media != null) {
media.start();
}
}
我的其他一切工作正常,但是当我最小化该应用程序然后返回并尝试恢复时,我的图像按钮将无法播放与其关联的音频文件。我必须返回应用程序的开始屏幕并返回带有图像按钮的 activity 页面,才能让它们再次播放音频。任何提示都会有所帮助。
public class ColorPage extends AppCompatActivity {
Context context = this;
MediaPlayer media = null;
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(media!=null){
media.stop();
media.release();
media = null;
}
}
@Override
protected void onResume() {
super.onResume();
if(media == null) {
media.start();
}
}
@Override
protected void onPause() {
super.onPause();
if(media != null) {
media.pause();
media.release();
media = null;
}
}
这是我正在使用的代码。除了 onResume() 之外,其他一切似乎都有效。
我也使用了 if(media != null) 但它所做的只是导致每次打开 activity 页面时最后一个音频文件自动播放。 If(media == null) 只是我尝试的最后一件事。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color_page);
ImageButton pinkB = (ImageButton) findViewById(R.id.pinkButton);
ImageButton yellowB = (ImageButton) findViewById(R.id.yellowButton);
ImageButton purpleB = (ImageButton) findViewById(R.id.purpleButton);
ImageButton blueB = (ImageButton) findViewById(R.id.blueButton);
ImageButton greenB = (ImageButton) findViewById(R.id.greenButton);
ImageButton redB = (ImageButton) findViewById(R.id.redButton);
media = MediaPlayer.create(context, R.raw.purpleaudiotest);
purpleB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.purpleaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.blueaudiotest);
blueB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.blueaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.redaudiotest);
redB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.redaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.greenaudiotest);
greenB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.greenaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.yellowaudiotest);
yellowB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.yellowaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
media = MediaPlayer.create(context, R.raw.pinkaudiotest);
pinkB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if (media != null) {
media.stop();
media.release();
media = MediaPlayer.create(context, R.raw.pinkaudiotest);
}
media.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
这是 class ColorPage 的其余代码,所以我的问题更清楚了。
您在每个颜色按钮 onClick 中的检查仅在它不为空时才初始化媒体,(很奇怪)在这种情况下它也恰好是问题所在。您的 onPause 使媒体无效,并且 onResume 不会重新初始化它,因此 if (media!=null) 始终为 false,实际上,在那之后您可能会在 media.start() 上获得 npe。像这样处理点击。
if (media != null) {
media.stop();
media.release(); // release previous media if not null
}
// initialize this outside of the if block
media = MediaPlayer.create(context, R.raw.pinkaudiotest); // whatever color in each
media.start();
您已在 onPause 中将媒体设置为 null,假设您只想从音频停止 onResume 的地方开始。如果你不想自动启动,似乎根本没有实现 onResume 的意义。
@Override
protected void onResume() {
super.onResume();
if(media != null) {
media.start();
}
}