我是靠谱客的博主 纯情雪糕,最近开发中收集的这篇文章主要介绍android oncreate调用,android – 为什么onCreate之后立即调用onPause方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我正在编写一个在固定时间显示活动的应用程序。

我从这样的代码开始服务:

intent.setClass(context, FakeAction.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);

在fakeAction的onCreate方法中,我需要唤醒设备并启动声音消息:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

onCreate中有很多代码显示屏幕上的信息并启动声音消息。

这是一个onPause方法:

@Override

protected void onPause()

{

Log.i(TAG, "onPause");

//Stop mediaPlayer

if(mp != null)

{

if(mp.isPlaying())mp.stop();

mp.release();

mp = null;

}

//Restore volume

if(audioManager != null)

{

audioManager.setStreamVolume(AudioManager.STREAM_ALARM, savedVolume, 0);

}

//Stop minute timer

handler.removeCallbacks(minuteReceiver);

super.onPause();

}

不幸的是,onPause()方法在onCreate之后立即被调用。所以我的声音信息立即停止。

但是如果活动在屏幕未锁定时启动,那么onCasate()不会在onCreate()之后立即调用)。

即使我评论所有的“getWindow()。addFlags()”字符串onPause()被调用onCreate()当屏幕被锁定。

问题是为什么onPause在onCreate之后立即被调用?

当用户按后退按钮时,如何区分onPause()方法的即时通话和onPause()的调用?

以下是活动的代码。我使用MVP模式,所以,主要代码在演示者。

但即使我发表了所有演示者的电话(就像我在本例中所做的那样),onPause()在onCreate()之后立即被调用,

我可以在AsyncTask中开始活动吗? AsyncTask是从服务启动的。如果完成后服务在AsyncTask之后停止。

public class FakeAction extends RoboActivity

implements

View.OnClickListener

,AlarmAction

{

private static final String TAG = "TA FakeAction";

@InjectView(R.id.aa_btn_Stop) Button btnStop;

@InjectView(R.id.aa_btn_Snooze) Button btnSnooze;

@InjectView(R.id.aa_tv_CurTime) TextView tvCurTime;

@InjectView(R.id.aa_tv_CurDate) TextView tvCurDate;

@InjectView(R.id.aa_tv_AlarmName) TextView tvAlarmName;

@Inject public AlarmActionPresenter presenter;

private Exception ex;

@Override

public void onCreate(Bundle savedInstanceState)

{

Log.i(TAG, "onCreate");

super.onCreate(savedInstanceState);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

setContentView(R.layout.alarm_action);

try

{

//presenter.onCreate(this);

}

catch(Exception ex)

{

this.ex = ex;

Log.e(TAG, "onCreate", ex);

}

btnStop.setOnClickListener(this);

btnSnooze.setOnClickListener(this);

}

@Override

protected void onPause()

{

Log.i(TAG, "onPause");

//presenter.onPause();

super.onPause();

}

@Override

public void onClick(View v)

{

Log.i(TAG, "onClick");

//presenter.onClick(v.getId());

}

@Override

public Bundle getIntentBundle()

{

return getIntent().getExtras();

}

@Override

public void setAlarmName(String alarmName)

{

tvAlarmName.setText(alarmName);

}

@Override

public String getAlarmName()

{

return tvAlarmName.getText().toString();

}

@Override

public void setCurTime(String curTime)

{

tvCurTime.setText(curTime);

}

@Override

public String getCurTime()

{

return tvCurTime.getText().toString();

}

@Override

public void setCurDate(String curDate)

{

tvCurDate.setText(curDate);

}

@Override

public String getCurDate()

{

return tvCurDate.getText().toString();

}

@Override

public IAssetFileDescriptorMockable openFd(String assetName) throws IOException

{

Log.i(TAG, "openFd");

return new AssetFileDescriptorMockable(getAssets().openFd(assetName));

}

}

最后

以上就是纯情雪糕为你收集整理的android oncreate调用,android – 为什么onCreate之后立即调用onPause方法的全部内容,希望文章能够帮你解决android oncreate调用,android – 为什么onCreate之后立即调用onPause方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部