Android界面最小化实现
在开发蓝牙模块功能时,涉及到蓝牙电话界面的最小化以及恢复功能。
-
在Activity中调用moveTaskToBack(boolean nonRot)方法即可将Activity从前台移至后台。注意此时Activity并不是finish()退出。
参数为false,则表示只有当前activity是task根,指应用启动的第一个activity时,才有效;
参数为true,则忽略这个限制,任何activity都可以有效。 -
未启动应用B,activity的task任务状态
-
启动应用B,activity的task任务状态
-
重启启动应用B,task任务状态
-
B界面执行返回按键之后,task状态
-
moveTaskToBack接口调用之后,task当中的activity的顺序不会发送改变,加入应用A启动应用B,B通过调用该接口切换至后台,重启启动B之后,会执行B中的onRestart-onStart-onResume方法,不会重新调用onCreate(),如果此时B中按下Home按键,返回的还是界面A,这就是推到后台的功能。
-
如果在Activity当中按下back按键,实际是调用finish()方法,此时应用会直接退出。但进程依然没有被杀死,android中每一个应用都运行于独立的一个虚拟机实例当中,所以在重启启动应用时一个类当中的静态对象依然处于运行时的状态,注意在合适位置复位这些状态。
-
通常应用最小化时,我们会新启一个service,在service当中新增布局,类似view,监听新增的view,便于界面最大化
-
以下是官方api解释
public boolean moveTaskToBack (boolean nonRoot)
Since: API Level 1
Move the task containing this activity to the back of the activity stack. The activity’s order within the task is unchanged.
Parameters
nonRoot If false then this only works if the activity is the root of a task; if true it will work for any activity in a task.
Returns
If the task was moved (or it was already at the back) true is returned, else false.