TabActivity里面添加Activity后怎么完全退出程序

junjun071308 2014-11-02 02:03:55
在网络上搜索了,大概就5个方案:
1.System.exit(0) 或者 finish 不可行

2.android.os.Process.killProcess(android.os.Process.myPid()); 不可行

3.利用广播发送退出请求,然后每一个Activity都继承一个基类Activity,在基类Activity里面完成退出 不可行

4.List<Activity> 每次有新的Activity就在他的onCreate()里面将自己添加至一个Activity管理栈,然后退出时一个一个从里面获取Activity,调用其finish()达到完全退出 该方案可行,但是问题是:这样一来,我的程序会变得很卡(程序本身要加载大量的图片,去除这个方案后和加入这个方案后卡顿效果明显(亲测),原因可能是这样一来,这个Activity就一直被Activity管理栈关联着,然后gc无法回收掉一些垃圾)

5.制造一个异常,并进行捕获,然后在自定义的Application里面处理这个异常,同时去除Android系统的默认Fc窗口,实现消无声息的异常退出,而在用户看来却是如同正常退出(原理还没搞明白,暂未测试实现

补充一下,我的TabActivity使用的是singleTask模式启动的
...全文
201 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
junjun071308 2014-11-04
  • 打赏
  • 举报
回复
引用 2 楼 peng_hope 的回复:
我之前也用List<Activity>, 但是现在不用了, 直接退出就finish, 其他的不管了... 你要是有更好的办法, 分享下...
用这个是可以的,但是再加一个,在onDestroy里面将它从链表移除出去
junjun071308 2014-11-04
  • 打赏
  • 举报
回复
引用 1 楼 birdsaction 的回复:
在你退出APP的时候,销毁不再使用的大对象,比如图片资源,静态数据资源。 退出的时候 修改标志位,让所有的耗时工作尽可能的停止,这样程序退出的时候能让DVM尽快回收垃圾, Android APP一般不容易立刻完全停止。
恩,之前退出每一个Activity的的时候没有及时该finish的finish 现在问题解决 方案是:在全局Application中定义管理的Activity链表,然后在每一个Activity的onCreate里面将其加入链表,在每一个onDestroy里面将其移出链表,这样程序既能完全退出,也能有效控制卡顿问题
peng_hope 2014-11-03
  • 打赏
  • 举报
回复
我之前也用List<Activity>, 但是现在不用了, 直接退出就finish, 其他的不管了... 你要是有更好的办法, 分享下...
Birds2018 2014-11-03
  • 打赏
  • 举报
回复
在你退出APP的时候,销毁不再使用的大对象,比如图片资源,静态数据资源。 退出的时候 修改标志位,让所有的耗时工作尽可能的停止,这样程序退出的时候能让DVM尽快回收垃圾, Android APP一般不容易立刻完全停止。
江 西 理 工 大 学 江 西 理 工 大 学 Android平台开发基础 实验报告 实验名称 实验四AndroidSQLite数据库应用 日期 2016-05-14 专业班级 计算机133班 地点 信息学院M601 实验人 学号 12 同组人 单独完成 实验目的 (1) 熟悉Android的文件操作 (2) 掌握Android SQLite数据库 (3) 熟悉XML 和JSon 文件读取 实验要求 熟练使用Android的项目创建; 掌握Android的SQLite数据库设计; 掌握Android的Activity 和Fragement用法; 熟悉XML 和JSon 文件读取 实验内容 要求使用SQLite数据库实现用户注册和登录,读取数据库信息,退出时生成XML文件或JSON文件。 四、实验过程和结果 content_main.xml: Android-实验报告-Sqlite-数据库操作全文共4页,当前为第1页。<TabHost android:id="@android:id/tabhost" tools:context="com.example.ydc.filemanager.MainActivity"> <TabWidget android:id="@android:id/tabs"/> TabHost> Android-实验报告-Sqlite-数据库操作全文共4页,当前为第1页。 MainActivity.java: public class MainActivity extends TabActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); /*start code*/ TabHost tabHost = getTabHost(); /*添加第一个选项卡*/ TabHost.TabSpec tab1 = tabHost.newTabSpec("tab1"); tab1.setIndicator("login"); tab1.setContent(new Intent(this,LoginActivity.class)); tabHost.addTab(tab1); /*添加第二个选项卡*/ ··· } RegisterActivity.java: public class RegisterActivity extends Activity { SQLiteDatabase db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_register); /*start*/ db = SQLiteDatabase.openOrCreateDatabase(this.getFilesDir().toString()+"/user.db3", null); /**/ Button register = (Button)findViewById(R.id.register); register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String username = ((EditText)findViewById(R.id.username)).getText().toString(); String password = ((EditText)findViewById(R.id.password)).getText().toString(); try{ String sql = "create table if not exists user_info (_id integer " + " primary key autoincrement," + " username varchar(255)," + "

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧