编辑*在Android设备上测试时发生此问题。在对emultor进行测试时,不会出现此问题。
我正在开始一个新的活动,我看到在调用onResume后立即调用onPause。如果我查看日志,它会在onResume之后进入Idle。因此,在调用onResume之后立即导致onPause。
来电者活动 - 通过意图调用onClick上的MainActivity。
public class TestActivity extends AppCompatActivity implements View.OnClickListener{
String TAG = "acr";
Button testBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
testBtn = (Button) findViewById(R.id.testBtn);
testBtn.setOnClickListener(this);
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "on pause called on TestActivity ");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "on resume called on TestActivity ");
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.testBtn:
Intent mainIntent = new Intent(this, MainActivity.class);
TestActivity.this.startActivity(mainIntent);
break;
}
}
}
有错误的活动
public class MainActivity extends AppCompatActivity{
public static final String TAG = "acrx";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "on pause called on mainactivity");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "on resume Called on Main activity");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "on stop Called on Main activity");
}
}
日志
12-06 23:24:19.751 22983-22983/com.example.m1alesis.smartcardreader I/acrx: on resume Called on Main activity
12-06 23:24:19.751 22983-22983/com.example.m1alesis.smartcardreader D/SecWifiDisplayUtil: Metadata value : SecSettings2
12-06 23:24:19.751 22983-22983/com.example.m1alesis.smartcardreader D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{5ce8491 I.E...... R.....ID 0,0-0,0}
12-06 23:24:19.781 22983-23012/com.example.m1alesis.smartcardreader D/mali_winsys: EGLint new_window_surface(egl_winsys_display*, void*, EGLSurface, EGLConfig, egl_winsys_surface**, egl_color_buffer_format*, EGLBoolean) returns 0x3000, [1440x2560]-format:1
12-06 23:24:19.811 22983-22983/com.example.m1alesis.smartcardreader W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
12-06 23:24:19.831 22983-22983/com.example.m1alesis.smartcardreader D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
12-06 23:24:19.871 22983-23012/com.example.m1alesis.smartcardreader D/OpenGLRenderer: endAllActiveAnimators on 0x7f9c17ec00 (RippleDrawable) with handle 0x7f9ccc8b60
12-06 23:24:19.871 22983-22983/com.example.m1alesis.smartcardreader I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@fa2f707 time:376798424
12-06 23:24:20.131 22983-22983/com.example.m1alesis.smartcardreader V/ActivityThread: updateVisibility : ActivityRecord{e78cff6 token=android.os.BinderProxy@a67fd36 {com.example.m1alesis.smartcardreader/com.example.m1alesis.smartcardreader.TestActivity}} show : false
12-06 23:24:31.561 22983-22983/com.example.m1alesis.smartcardreader I/acrx: on pause called on mainactivity
12-06 23:24:31.701 22983-22983/com.example.m1alesis.smartcardreader I/acrx: on resume Called on Main activity
12-06 23:24:31.721 22983-22983/com.example.m1alesis.smartcardreader I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@fa2f707 time:376810271
答案 0 :(得分:0)
我在我的测试活动中尝试过,但我没有遇到你的问题。我的MainActivity和TestActivity上只有一个按钮。
我在这里找到了一些东西:Pausing and Resuming an Activity。
这是有趣的部分:
注意:当系统调用您的活动的onPause()方法时,系统可能会发出活动暂停的信号,并且用户可能会将焦点返回到您的活动,或者该应用程序在多窗口中运行模式。但是,此方法调用也可能是用户离开您的活动的第一个指示。
答案 1 :(得分:0)
我遇到了同样的问题,对我而言,它与启动的活动和屏幕没有打开有关 - 我只是在屏幕关闭后才看到它(例如,在触摸电源按钮然后回家再次恢复之后)
这是其他人也看到的行为 - 我发现这个问题和答案都有用的参考:OnPause and OnStop() called immediately after starting activity
帮助我了解行为的关键词是:
请记住,onResume不是您的活动对用户可见的最佳指标;诸如键盘锁之类的系统窗口可以在前面。使用onWindowFocusChanged(boolean)来确定您的活动对用户可见
答案 2 :(得分:0)
就我而言,同样的问题是由 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission...);
引起的。
* This method may start an activity allowing the user to choose which permissions
* to grant and which to reject. Hence, you should be prepared that your activity
* may be paused and resumed. Further, granting some permissions may require
* a restart of you application. In such a case, the system will recreate the
* activity stack before delivering the result to your
* {@link OnRequestPermissionsResultCallback#onRequestPermissionsResult(int, String[], int[])}.
这明显减慢了应用的启动速度。