关于Activity一些技巧
2015-06-11 13:18
253 查看
关于Activity一些技巧
标签(空格分隔): Activity关于Activity一些技巧
活动被回收了怎么办
知晓当前是哪一个活动
随时随地的退出程序
启动活动的最佳写法
1.活动被回收了怎么办?
活动中可以存在一些临时数据和状态,如果被回收了,可能之前的临时数据全没了。Activity中提供了一个onSaveInstanceState()回调方法,这个方法保证一定会在活动被回收之前调用,因此,我们可以通过这个方法来解决活动回收时临时数据得不到保存的问题。
onSaveInstanceState()会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据,比如putString()、putInt()等。
在MainActivity中添加如下代码就可以将临时数据进行保存:
@Override protected void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); String tempData="Something need to be stored"; outState.putString("data_key",tempData); }
我们需要取出临时保存的全部数据,只需要在onCreate()中相应的方法取出数据即可。
修改MainActivity的onCreate()方法,如下所示:
@Overrid protected void onCreate(Bundle savedInstanceState){ ..... ..... if(savedInstanceState!=null){ String tempData=savedInstanceState.getString("data_key"); Log.i("MainActivity",tempData); } }
2. 知晓当前是哪一个活动
新建一个BaseActivity继承自Activity,然后重写onCreate()方法如下所示:public void BaseActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.i("BaseActivity",getClass().getSimpleName()); } }
3. 随时随地的退出程序
如果你想退出程序,有时候需要按多次Back键才行,按Home键只是把程序挂起,并没有退出。如果需要随时随地的退出程序应该怎么办呢,其实这个思路很简单,我们只需要用一个专门的集合类来对所有的活动进行管理就可以了。新建一个ActivityCollector类作为活动管理器,代码如下:
/** *活动管理器 */ public class ActivityCollector { public static List<Activity> activities=new ArrayList<Activity>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Activity activity){ activities.remove(activity); } public static void finishAll(){ for (Activity activity : activities) { if (!activity.isFinishing) { activity.fininsh(); } } } }
接下来修改BaseActivity中的代码,如下所示:
public void BaseActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.i("BaseActivity",getClass().getSimpleName()); //将正在创建的活动添加到活动管理器中 ActivityCollector.addActivity(this); } @Override protected void onDestroy(){ super.onDestroy(); //将一个将要销毁的活动从活动管理器中移除 ActivityCollector.removeActivity(this); } }
如果需要在哪个地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了。
4. 启动活动的最佳写法
修改SecondActivity中代码,如下所示:public class SecondActivity extends BaseActivity{ public static void actionStart(Context context,String data1,String data2){ Intent intent=new Intent(context,SecondActivity.class); intent.putExtra("param1",data1); intent.putExtra("param2",data2); context.startActivity(intent); } }
这样简化了启动代码,只需要一行代码就可以启动SecondActivity,如下所示:
SecondActivity.actionStart(FirstActivity.this,"data1","data2");
养成良好的习惯,给每个活动都添加类似的启动方法。
相关文章推荐
- oracle数据库
- codeforces 549D
- Activity四种启动模式
- hdu 3547 DIY Cube (Ploya定理)
- Linux pipe功能
- OpenWrt [mktplinkfw] *** error: images are too big
- nyoj 70 阶乘因式分解(二)
- LSM存储模型
- scala 官方教程
- cocos2d-x 3.6版连连看版本控制
- Android发送邮件
- 借助网盘离线下载从官网下载DB2-Express C
- 四大组件
- SAP编号范围对象相关函数
- 基于Hadoop和Openstack云存储的研究(HDFS和Swift对比)
- 使用IE导入和导出cer和crt格式证书
- Ubuntu 更新错误修复大全
- 关于【SSI】框架中queryForObject返回值为空或者其他
- Android反编译工具简介
- C#做的剪刀石头布游戏