当前位置: 代码迷 >> Android >> 关于finish()调用后Activity的生命周期有关问题
  详细解决方案

关于finish()调用后Activity的生命周期有关问题

热度:15   发布时间:2016-04-28 03:31:16.0
关于finish()调用后Activity的生命周期问题
这个Activity onStop()里写的是防止切入后台的代码 onTouchEvent()中写的是当用户点击屏幕时会自动销毁。
可是为毛我实测的时候点击一下屏幕,程序销毁,过了一小会儿程序就又自动启动了。
应该是回调了onStop()方法。finish()不是直接调用onDestroy吗?到底finish()后Activity经历了哪些生命周期啊?


package com.example.testnobackstage;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MotionEvent;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


@Override
protected void onStop()
{
// TODO Auto-generated method stub
super.onStop();
Intent intent=new Intent();
intent.setClass(this,MainActivity.class);
this.startActivity(intent);
this.finish();
}


@Override
public boolean onTouchEvent(MotionEvent event)
{
// TODO Auto-generated method stub
this.finish();
return super.onTouchEvent(event);
}

    
    
}

------解决思路----------------------
finish函数会向AcitvityManager发送消息,请求关闭,我想应该是异步过程,我觉得可能是你调用的位置不对。或者不应该调用super.onTouchEvent。直接返回true试试。
------解决思路----------------------
你onstop方法不是又启用了mainactivity吗?
------解决思路----------------------
finish 完了要经历 onPause  onStop   onDestory
不论是activity被新启动的activity完全覆盖,还是activity被finish,也就是activity的stop过程以及finsh过程,均是在最新被resume的activity已经resume完成之后才去处理。
每个应用程序的主线程ActivityThread中,当没有任何的消息待处理时,就是已被resumed的activity状态是空闲的。android将前一个被完全覆盖不可见的或者finish的activity的stop或finish操作放在此时来处理
应该是先显示新的activity,然后才会stop或者finish旧的activity
------解决思路----------------------
你直接在onCreate onResume onPause onStop onDestory输出一句不就很了解了,实践胜于理论。。。。
  相关解决方案