小编And*_*rey的帖子

为什么在onCreate之后立即调用onPause方法

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

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

intent.setClass(context, FakeAction.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

在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);
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

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

但是如果在未锁定屏幕时启动活动,则在onCreate()之后不会立即调用onPasue();

即使我评论所有"getWindow().addFlags()"字符串,onCreate()在onCreate()之后调用,如果屏幕被锁定.

问题是为什么在onCreate之后立即调用onPause?当用户按下后退按钮时,如何区分onPause()方法的立即调用和onPause()的调用?

以下是活动的代码.我使用MVP模式,因此,主要代码在演示者中.但即使我评论所有演示者的调用(就像我在本例中所做的那样),onCreate()之后立即调用onPause()

我是否可以在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; …
Run Code Online (Sandbox Code Playgroud)

android

19
推荐指数
2
解决办法
1万
查看次数

标签 统计

android ×1