如何手动触发我的 Android onPause() 方法来测试它?

How can I manually trigger my Android onPause() method to test it?

我想手动测试我正在编写的 Android 应用程序在暂停时是否正常工作。 我可以通过 Android GUI 做什么来调用 onPause() 方法而不导致也调用 onStop()

我试过拉下通知栏并收到 phone 呼叫,但都没有导致 onPause() 被呼叫。

我想通过 GUI 找到适用于 Android 多个版本的非编程解决方案,有或没有 phones,因为我正在教一个 class到处都是使用不同设备的学生。

请注意,我不是在询问如何判断 如果 我的 onPause() 方法被调用。我在问我能做些什么来调用它,而不修改我的应用程序。

您可以通过编程方式调用它。

或者简单地以不同的意图开始 activity。

这可能是在应用程序中执行此操作的一种方法。

  @Override
    protected void onPause () {
        super.onPause();
        Toast.makeText(this, "Paused", Toast.LENGTH_SHORT).show();
        finish();
    }

    @Override
    protected void onStop () {
        super.onStop();
        Toast.makeText(this, "stopped", Toast.LENGTH_SHORT).show();
    }

您的其他方法是使用 intent 打开任何 Activity/Application。

根据文档暂停状态发生,如果 activity 失去焦点但仍然可见(也就是说,一个新的非全尺寸或透明 activity 焦点在您的 activity),它已暂停。暂停的 activity 是完全活跃的(它维护所有状态和成员信息并保持附加到 window 管理器),但在内存极低的情况下可能会被系统杀死。

因此,如果您参加通话,显然您的通话屏幕将出现在堆栈中,并且它将调用之前 运行 activity.

的 onStop()

因此,如果您只想调用 onPause(),则应打开一个新的非全尺寸或透明 activity。

我找到了解决办法。我是从书中的一张图片得到的想法Head-First Android Development

  1. 安装Any Do.
  2. 创建任务。
  3. 设置未来几分钟的闹钟。
  4. 启动正在测试的应用程序。
  5. 当警报出现时,我的应用程序被部分遮挡,并且它的 onPause() 方法被调用。如果我单击“关闭”图标,我的应用程序会在未调用其 onStop() 方法的情况下恢复。

您可以创建一个警报对话框来调用 onPause() 而无需调用 onStop()

但需要注意的重点是将警报对话框创建为活动。

这可以按如下方式完成:

创建一个名为 dialog 的新活动 class 扩展 AppCompatActivty,并将其添加到 AndroidManifest.xml,如下所示:

public class dialog extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //set appropriate layout
        setContentView(R.layout.activity_main);
    }
}

添加到AndroidManifest.xml:

<application>
....
    <activity
                android:name="dialog"
                android:theme="@style/Theme.AppCompat.Dialog"></activity>
</application>

将以下内容添加到 MainActivty.java 的 onCreate() 方法中:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), dialog.class);
                startActivity(intent);
            }
        });

实际上在 29 API 通知可能不起作用。
对于手动调用方法 onPause()/onResume() 应该按住主页按钮