您的位置:首页 > 移动开发 > Android开发

Android 巧妙避免倒计时跳转页面时出现的问题

2017-12-13 20:47 633 查看
        在Android开发中,当我们实现导航页倒计时跳转时常会出现这样的问题:        1.计时器正在倒计时的时候点击跳转按钮,会出现跳两次的状况,这是其一;        2.其二,当计时器正在倒计时的时候按返回键,进入桌面后几秒后又进入应用。        以下代码解决了这个问题。方法一: 使用handlerpackage com.example.daohangye;import android.content.Intent;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.RelativeLayout;import android.widget.TextView;public class MainActivity extends AppCompatActivity {int count = 6;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);count--;if (count == 0) {Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);} else {handler.sendEmptyMessageDelayed(1, 1000);tv.setText("倒计时:" + count);}}};private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);handler.sendEmptyMessage(1);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);handler.removeMessages(1);}});}@Overrideprotected void onDestroy() {super.onDestroy();handler.removeMessages(1);if (handler != null) {handler = null;}}}
方法二:使用Timer计时器
package com.example.text;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.TextView;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity {private TextView tv;private Boolean A=true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = findViewById(R.id.ss);tv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);A=false;finish();Log.e("TAG",A+"");}});//计时器Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {if(A==true) {Intent intent = new Intent(MainActivity.this, Main2Activity.class);startActivity(intent);finish();}}},6000);}@Overrideprotected void onDestroy() {super.onDestroy();A=false;}}
方法三:使用Handler和runnable
package com.example.mytest;import android.content.Intent;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.Toast;public class MainActivity extends AppCompatActivity {private int count = 4;private Handler mHandler = new Handler();private Runnable mRunnable = new Runnable() {public void run() {count--;setTitle("" + count);if (count==0){setTitle("1");Toast.makeText(MainActivity.this,"跳转",Toast.LENGTH_SHORT).show();startActivity(new Intent(MainActivity.this,Main2Activity.class));}else {// 每3秒执行一次mHandler.postDelayed(mRunnable, 1000);  //给自己发送消息,自运行}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.e("tag", ""+ "iioioioioioioio");// 通过Handler启动线程mHandler.post(mRunnable);  //发送消息,启动线程运行}@Overrideprotected void onDestroy() {//将线程销毁掉mHandler.removeCallbacks(mRunnable);super.onDestroy();}}
               
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: