Android 启动 Activity和一键退出应用的的最佳方法
来源:互联网 发布:js中string的方法 编辑:程序博客网 时间:2024/05/29 14:25
启动 Activity
常规的启动Activity
的方法,就是通过Intent
构建一个意图,然后通过context.startActivity()
或者context.startActivityForResult()
将活动启动起来
Intent intent = new Intent(this,MainActivity.class); intent.putExtra("params1","a"); intent.putExtra("params2","b"); startActivity(intent);
这样写是正确的,但是就是有一个问题,就是团队开发的对接问题,如果要启动的Activity
并不是自己开发的话,那么就不清楚要传递什么数据过去.’
最佳的写法应该是下面这种
public static void startActivity(Context context,String data1,String data2){ Intent intent = new Intent(context,MainActivity.class); intent.putExtra("params1", data1); intent.putExtra("params2",data2); context.startActivity(intent); }
这样就很好的解决了数据传递问题,而不需要询问另一个页面的开发人员或者看第二个页面的代码了.
一键退出应用1
当我们的应用层次很深的时候,我们想要退出应用的时候,这时候点击back
键会一层一层的 将回退栈清空然后退出应用(正常的launchMode
),点击Home
,也只是将应用切换至后台,而不是退出,
在开发的过程中,我们一般是用一个单例类(Stack
)来管理
/** * Created by BoBoMEe on 2015/12/30. */public class ActivityStack { private static ActivityStack instance; private Stack<Activity> activityStack;//activity栈 private ActivityStack() { } //单例模式 public static ActivityStack getInstance() { if (instance == null) { instance = new ActivityStack(); } return instance; } //把一个activity压入栈中 public void push(Activity actvity) { if (activityStack == null) { activityStack = new Stack<Activity>(); } activityStack.add(actvity); } //获取栈顶的activity,先进后出原则 public Activity getLast() { return activityStack.lastElement(); } //移除一个activity public void pop(Activity activity) { if (activity != null && !activity.isFinishing()&&activityStack != null && activityStack.size() > 0&&activityStack.contains(activity)){ activity.finish(); activityStack.remove(activity); } } //退出所有activity public void finishAll() { if (activityStack != null) { while (activityStack.size() > 0) { Activity activity = getLast(); if (activity == null) break; pop(activity); } } }}
同时.我们需要写一个所有Activity
的基类BaseActivity
.其他Activity
都来继承这个类即可。
/** * Created by BoBoMEe on 2015/12/30. */public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityStack.getInstance().push(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityStack.getInstance().pop(this); }}
在我们的应用中,正常返回则是将List中的Activity移除,同时,一键退出的时候,我们可以选择finishAll()方法
public void finishAll(View view){ ActivityStack.getInstance().finishAll(); }
一键退出应用2
利用的是Activity
的launchMode
和广播来实现,我们都知道Activity
中有个launchMode = singleTask
,如果设置后,跳转到相应Activity
会将其上的栈清空,调用相应Activity
的onNewIntent
方法,那么这种实现步骤如下:
- 设置
MainActivity
的加载模式为singleTask
- 重写
MainActivity
中的onNewIntent
方法 - 需要退出时在
Intent
中添加退出的tag
Manifest
<activity android:name="MainActivity" android:launchMode="singleTask"/>
MainActivity的onNewIntent
private static final String TAG_EXIT = "exit"; @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent != null) { boolean isExit = intent.getBooleanExtra(TAG_EXIT, false); if (isExit) { this.finish(); } } }
退出广播
Intent intent = new Intent(this,MainActivity.class); intent.putExtra(MainActivity.TAG_EXIT, true); startActivity(intent);
双击退出应用
- 再按一次退出
private long exitTime = 0;@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); System.exit(0); } return true; } return super.onKeyDown(keyCode, event);}
- 对话框退出应用
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // back按键 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 && isStackBottomActivy(this)) { confirmQuit(this); return true; } return super.onKeyDown(keyCode, event); }
判断当前Activity是否在栈顶
有时我们会判断当前是否处在栈顶,是栈顶的话就退出应用,否则向上回退,或者在栈顶做一些自定义操作等。
// 判断当前Activity是否是在栈顶 public static boolean isStackBottomActivy(Activity activity) { ActivityManager manager = (ActivityManager) UIUtils.getContext().getSystemService(Context.ACTIVITY_SERVICE); String name = manager.getRunningTasks(1).get(0).topActivity.getClassName(); return name.equals(activity.getClass().getName()); }
// 连续点击返回,退出应用 public static void confirmQuit(final Context context) { AlertDialog.Builder build = new AlertDialog.Builder(this); build.setTitle("系统提示").setMessage("确定要退出吗?"); build.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); build.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); }
- Android 启动 Activity和一键退出应用的的最佳方法
- Android退出多个activity和单个activity的方法
- Activity启动和退出调用的方法流程
- Android 之 启动一个activity的最佳方法
- Android中Activity的启动和退出动画
- Activity的启动模式和退出
- android退出有多个activity的应用
- android退出有多个activity的应用
- android退出应用销毁所有的activity
- android 退出应用的方法
- 退出Activity的方法
- 退出Activity的方法
- android 退出全部activity的方法
- android程序退出当前activity的方法
- android程序退出当前activity的方法
- android程序退出当前activity的方法
- android程序退出当前activity的方法
- android程序退出当前activity的方法
- Javascript面向对象及组件开发(二)面向对象的写法
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据
- Swift实现的iOS常用手势识别Demo
- MIPS
- MeidaPlayer音效测试用例
- Android 启动 Activity和一键退出应用的的最佳方法
- android阅读器里的 txt 文本处理分页功能的实现:
- 书-Programming Game AI by Example
- 20151230 053 60-b20
- 梦醒
- css3 cal 用法
- redhat中的setup工具 可视化配置
- Javascript面向对象及组件的详细介绍(三)面向对象的拖拽
- error:LNK2005 已经在*.obj中定义