基本上,这就是我正在做的事情

1)设置AlarmManager以执行BroadcastReceiver(BCR)

Intent intent = new Intent(m_Context, BCR.class);  
intent.putExtras(extras);  
PendingIntent pendingIntent = PendingIntent.getBroadcast(m_Context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, StartTime, pendingIntent)  

2)从BCR启动MyActivity

@Override  
public void onReceive(Context context, Intent intent) {  
    Intent newIntent = new Intent(context, MyActivity.class);
    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);  
    context.startActivity(newIntent);  
}

3)如果MyActivity未打开,请将其打开

@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState); 
    getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
    getWindow().addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    setContentView(R.layout.myactivity);  
} 

@Overide  
protected void onNewIntent(Intent intent) {  
    super.onNewIntent(intent);  
}  

出于某种原因,我注意到当MyActivity打开时,它的流程如下:

onCreate / onNewIntent - > onResume - > onPause - > onResume

我不确定为什么它会立即进行onPause。 我注意到这只发生在标志打开被筛选时。 有谁知道为什么会这样? 有什么办法可以防止这种行为?

===============>>#1 票数:29

为了防止其他人遇到这种情况,我似乎只会在通过XML布局将活动内部的片段膨胀时注意到此行为。 我不知道这种行为是否也发生在Fragments的兼容性库版本中(我使用的是android.app.Fragment)

在将Fragment#onResume调用到任何添加的片段之前,活动似乎会调用Activity#onResume ,然后再次调用Activity#onResume

  1. 活动:的onCreate
  2. 片段:onAttach
  3. 活动时间:onAttachFragments
  4. 片段:的onCreate
  5. 活动:onStart
  6. 活动:onResume
  7. 片段:onResume
  8. 活动:onResume

===============>>#2 票数:16

如果你有ES File Explorer那么FORCE停止它。 不知何故,他们会中断你的应用程序的生命周期(评论建议某种覆盖)

我的onResume被引发两次的问题是因为onPause在创建活动后以某种方式被调用..某些东西正在打断我的应用程序。

只有 在安装后第一次打开或从工作室构建 才会发生。

我从另一篇文章中得到了线索 ,发现这是因为ES文件资源管理器。 为什么onResume()似乎被调用两次?

一旦我强制停止ES文件资源管理器 ,这种打嗝行为就不再发生......在尝试了许多其他提议的解决方案之后,知道它是令人沮丧的。 所以要注意像这样的任何其他中断应用程序。

===============>>#3 票数:8

如果您每次尝试请求权限都会导致此类问题,请检查您是否已授予权限

requestPermissions可以导致它:

onCreate
onStart
onResume
onPause
onResume

===============>>#4 票数:7

我正在研究这个问题一段时间,因为在互联网上没有提到这种奇怪的行为。 我没有解决方法如何克服这种黑暗行为,但我确实发现了确实发生的情况。

onPause-onResume-onPause-onResume每当安装后第一次启动app时就会发生。 您可以通过对代码进行任何更改并从IDE重新运行(包括重新编译)应用程序来简单地调用此行为。

无论您是否使用AppCompat库。 我已经测试了这两种情况和行为继续进行。

注意:在Android Marshmallow上测试过。

我从这个线程中借用了关于片段和活动生命周期的代码,这里是(只需复制,粘贴,在清单中声明活动并运行Forest运行):

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class TestActivity extends Activity {

    private static final String TAG = "ACTIVITY";

    public TestActivity() {
        super();
        Log.d(TAG, this + ": this()");
    }

    protected void finalize() throws Throwable {
        super.finalize();
        Log.d(TAG, this + ": finalize()");
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, this + ": onCreate()");


        TextView tv = new TextView(this);
        tv.setText("Hello world");
        setContentView(tv);

        if (getFragmentManager().findFragmentByTag("test_fragment") == null) {
            Log.d(TAG, this + ": Existing fragment not found.");
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(new TestFragment(), "test_fragment").commit();
        } else {
            Log.d(TAG, this + ": Existing fragment found.");
        }
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, this + ": onStart()");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, this + ": onResume()");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d(TAG, this + ": onPause()");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, this + ": onStop()");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, this + ": onDestroy()");
    }


    public static class TestFragment extends Fragment {

        private static final String TAG = "FRAGMENT";

        public TestFragment() {
            super();
            Log.d(TAG, this + ": this() " + this);
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d(TAG, this + ": onCreate()");
        }


        @Override
        public void onAttach(final Context context) {
            super.onAttach(context);
            Log.d(TAG, this + ": onAttach(" + context + ")");
        }

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            Log.d(TAG, this + ": onActivityCreated()");
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            Log.d(TAG, this + ": onCreateView()");
            return null;
        }

        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            Log.d(TAG, this + ": onViewCreated()");
        }

        @Override
        public void onDestroyView() {
            super.onDestroyView();
            Log.d(TAG, this + ": onDestroyView()");
        }

        @Override
        public void onDetach() {
            super.onDetach();
            Log.d(TAG, this + ": onDetach()");
        }

        @Override
        public void onStart() {
            super.onStart();
            Log.d(TAG, this + ": onStart()");
        }

        @Override
        public void onResume() {
            super.onResume();
            Log.d(TAG, this + ": onResume()");
        }

        @Override
        public void onPause() {
            super.onPause();
            Log.d(TAG, this + ": onPause()");
        }

        @Override
        public void onStop() {
            super.onStop();
            Log.d(TAG, this + ": onStop()");
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            Log.d(TAG, this + ": onDestroy()");
        }
    }

}

===============>>#5 票数:5

我不确定发生了什么,但我怀疑您的活动正在重新启动,因为设置屏幕被系统视为配置更改。 您可以尝试在每次调用onResume记录配置,看看是否正在发生这种情况,如果是,那么实际发生了什么变化。 然后,您可以修改清单,告诉系统您的活动将自行处理更改。

protected void onResume() [
    super.onResume();
    Configuration config = new Configuration();
    config.setToDefaults();
    Log.d("Config", config.toString());
    . . .
}

===============>>#6 票数:2

我有类似的问题。 我的情况是下一个CurrentActivity扩展MainActivity CurrentFragment扩展MainFragment

我通常是故意打开CurrentActivity 在onCreate CurrentAcitivity中,我正在替换CurrentFragment。

生命周期是:1。onResume MainActivity 2. onResume CurrentActivity 3. onResume MainFragment 4. onResume CurrentFragment

自动调用onPause,然后再调用

  1. onResume MainActivity
  2. onResume CurrentActivity
  3. onResume MainFragment
  4. onResume CurrentFragment

我决定重新测试所有内容,经过几个小时的尝试和玩耍,我找到了根本问题。 在MainFragment onStart中,我每次调用startActivityForResult(在我的情况下是用于打开Wifi的android弹出窗口),这是在MainFragment上调用onPause。 我们所有人都知道onPause接下来是onResume。

所以它不是Android的bug,它只是我的:-)

快乐的生命周期!

===============>>#7 票数:1

我有一个类似的问题,我的问题是在onCreate()方法,我正在做:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.friends);  <-- problem
}

我打电话给“超级”。 两次触发onResume()。 在我将其更改为以下之后,它按预期工作:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.friends);  <-- 'super.' removed
}

希望能帮助到你。

===============>>#8 票数:0

我也遇到了这个onresume-onpause-onresume序列(在4.1.2及更高版本上,但我没有在2.3上遇到过这个)。 我的问题与唤醒锁处理有关:我不小心忘记释放唤醒锁并重新获取它导致错误,并显示“WakeLock在保持时仍然完成”的消息。 此问题导致在onResume之后立即调用onPause并导致错误行为。

我的建议是:检查日志中的错误,这些可能与此问题有关。

另一个提示:打开屏幕可能比简单地使用窗口标志更棘手。 您可能需要在此处查看此答案 - 它建议您设置接收器以检查屏幕是否已打开并仅在以下情况下启动所需的活动: https//stackoverflow.com/a/16346369/875442

===============>>#9 票数:0

似乎使用支持库中的Activity自动保存和恢复实例。 因此,只有在savedInstanceStatenull时才进行工作。

===============>>#10 票数:0

我刚碰到这个,似乎getWindow().addFlags()和调整Window属性一般可能是罪魁祸首。

当我的代码是这样的

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_generic_fragment_host);
    // performing fragment transaction when instance state is null...

onResume()被触发两次,但是当我删除requestWindowFeature() ,它只被调用一次。

===============>>#11 票数:0

我想你应该看一下这个问题: Nexus 5进入睡眠模式会让活动生命周期变得越来越糟糕你应该找到潜在客户

===============>>#12 票数:0

基本上很多东西都可以触发这个。 一些失去焦点的恢复过程可以做到。 一些应用程序也会导致它发生。 应对的唯一方法是阻止双重运行。 注意,这也会有一个错误的暂停,以获得良好的衡量标准。

    boolean resumeblock = false;

    @Override
    protected void onResume() {
        super.onResume();
        sceneView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                sceneView.getViewTreeObserver().removeOnPreDrawListener(this);
                if (resumeblock) return false;
                resumeblock = true;

                //Some code.

                return false;
            }
        });
    }

这是防止此类事情的可靠方法。 它将阻止双重简历。 但是,它还会阻止两个保留内存的简历。 因此,如果你失去了焦点,它不需要重建你的东西​​。 它也会阻止它。 这可能是一个明显的好处,因为如果你使用简历来控制焦点上的一些变化,你实际上关心你是否因为焦点需要重建那些东西。 由于预绘制侦听器只能由一个线程调用,并且必须按顺序调用它们,因此此处的代码只运行一次。 直到某些东西正确销毁整个活动并将resumeblock设置为false。

===============>>#13 票数:0

我也遇到了这个问题,这是因为碎片..你在活动onResume()拥有的碎片数量会调用那么多次。 克服我在SharedPrefrences使用的标志变量

===============>>#14 票数:0

正如@TWL所说ES文件浏览器对我来说是个问题! 卸载应用程序解决了这个问题。 安装此ES文件资源管理器时, onStart() -> onResume() -> onPause() -> onResume() ..是问题所在。 onResume()被称为2'ce。

===============>>#15 票数:0

我有同样的问题。 我的运行时是代码

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

我只是把它放在清单中

android:screenOrientation="landscape"

两次调用onCreate和onResume没有更多问题。

  ask by Huy T translate from so

未解决问题?本站智能推荐: