安卓闪屏页的立刻跳转按钮异常

import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.lang.ref.WeakReference;

/**    项目说明,这是一个安卓app的引导页.
 *     用MyCountDownTimer 实现倒计时现实,用postDelayed实现跳转.
 *     在这儿有一个button,实现了监听事件,点击按钮后可以结束MyCountDownTimer 定时器,
 *      
 *
 * 
 */
public class splashActivity extends AppCompatActivity {

    private TextView tv_countDown;
   // private RelativeLayout ll_splashActivity;
    private Button buttonOne;
    private Runnable runnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        buttonOne = (Button) findViewById(R.id.button_Id);
        tv_countDown = (TextView) findViewById(R.id.tv_countDown);
      

        final MyCountDownTimer mc = new MyCountDownTimer(6000, 1000);
        mc.start();
       /* buttonOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //从闪屏界面跳转到首界面
                //System.out.println("开启失败!!!!");
                //startMainActivity();
                if(runnable!=null){
                // handler的进程
                    handler.removeCallbacks(runnable);
                }
                // 取消定时器
                mc.cancel();
                // 立刻跳转到MainActivity
                startMainActivity();
            }
        });    */


        handler.postDelayed(runnable = new Runnable() {
            @Override
            public void run() {
                startMainActivity();


        }, 5000);

    }


    private void startMainActivity() {

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        // 结束闪屏页的activity

        splashActivity.this.finish();
    }

    private final MyHandler handler = new MyHandler(this);

    private static class MyHandler extends Handler {

        private WeakReference<splashActivity> weakReference;

        public MyHandler(splashActivity activity) {

            weakReference = new WeakReference<splashActivity>(activity);
        }


        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    }

    // 安卓倒计时
    class MyCountDownTimer extends CountDownTimer {
        //millisInFuture:倒计时的总数,单位毫秒
        //例如 millisInFuture=1000;表示1秒
        //countDownInterval:表示间隔多少毫秒,调用一次onTick方法()
        //例如: countDownInterval =1000;表示每1000毫秒调用一次onTick()
        public MyCountDownTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        public void onFinish() {
            // buttonOne.setClickable(true);

            tv_countDown.setText("开始跳转……");
        }

        public void onTick(long millisUntilFinished) {
            tv_countDown.setText("倒计时(" + millisUntilFinished / 1000 + ")");
            // pass_Id.setText("点击跳过(" + millisUntilFinished / 1000 + ")");
            //  buttonOne.setClickable(false);
            //  buttonOne.setText("你好");
        }
    }
}
阅读 3.4k
3 个回答

加这个属性 FLAG_ACTIVITY_NEW_TASK 看看

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.lang.ref.WeakReference;

public class splashActivity extends Activity {

private TextView tv_countDown;
// private RelativeLayout ll_splashActivity;
private Button buttonOne;
private Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    buttonOne = (Button) findViewById(R.id.button_Id);
    tv_countDown = (TextView) findViewById(R.id.tv_countDown);
    final MyCountDownTimer mc = new MyCountDownTimer(6000, 1000);
    mc.start();
    handler.postDelayed(runnable = new Runnable() {
        @Override
        public void run() {
            if(isFinishing()){
                return;
            }
            startMainActivity();
        }}, 5000);
    buttonOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startMainActivity();
        }
    });
}
private void startMainActivity() {

    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
    // 结束闪屏页的activity

    splashActivity.this.finish();
}

    private final MyHandler handler = new MyHandler(this);

    private static class MyHandler extends Handler {

        private WeakReference<splashActivity> weakReference;

        public MyHandler(splashActivity activity) {

            weakReference = new WeakReference<splashActivity>(activity);
        }
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    }

    // 安卓倒计时
    class MyCountDownTimer extends CountDownTimer {
        //millisInFuture:倒计时的总数,单位毫秒
        //例如 millisInFuture=1000;表示1秒
        //countDownInterval:表示间隔多少毫秒,调用一次onTick方法()
        //例如: countDownInterval =1000;表示每1000毫秒调用一次onTick()
        public MyCountDownTimer(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }

        public void onFinish() {
            // buttonOne.setClickable(true);

            tv_countDown.setText("开始跳转……");
        }

        public void onTick(long millisUntilFinished) {
            tv_countDown.setText("倒计时(" + millisUntilFinished / 1000 + ")");
            // pass_Id.setText("点击跳过(" + millisUntilFinished / 1000 + ")");
            //  buttonOne.setClickable(false);
            //  buttonOne.setText("你好");
        }
    }

}

在延迟跳转里面加一个判断,如果页面已经销毁,就不再跳转了

主动触发跳转的时候把handler的回调移除掉 removeAllCallBackAndMessages 应该没拼错 参数填null 表示全部移除

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题