A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

泄密:黑马Android内部压轴技术面连载现世(二)

涨薪机密——潮流新技术、新框架资源以后不定期更新,
5. 如何将一个Activity设置成窗口的样式。
        可以自定义一个activity的样式
        android:theme="@android:style/Theme.Dialog"
6. 你后台的Activity被系统回收怎么办?
       如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
        除了在栈顶的activity,其他的activity都有可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大.
            protected void onSaveInstanceState(Bundle outState) {
                   super.onSaveInstanceState(outState);
                   outState.putLong("id",1234567890);
            }
           public void onCreate(Bundle savedInstanceState) {
              //判断savedInstanceState是不是空.
              //如果不为空就取出来
              super.onCreate(savedInstanceState);
           }
         备用方案:切换到后台的时候就先把数据保存,在切换到前台的时候重新获取数据恢复界面

7. 如何退出Activity?如何安全退出已调用多个Activity的Application?
        退出activity 直接调用 finish () 方法 . //用户点击back键 就是退出一个activity
        退出activity 会执行 onDestroy()方法 .
       1、递归退出
             在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
       2、记录打开的Activity:
             每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
            List<Activity>lists ; 在application 全集的环境里面
            lists =new ArrayList<Activity>();
            lists.add(activity);
           for(Activity activity: lists){
                activity.finish();
            }
       3、发送特定广播:
            在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
            //给某个activity 注册接受接受广播的意图     
             registerReceiver(receiver,filter)
            //如果过接受到的是 关闭activity的广播  就调用finish()方法把当前的activity finish()掉
           上面是网上的一些做法.
            其实 可以通过 intent的flag 来实现.. intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一个新的activity,然后在新的activity的oncreate方法里面 finish掉.

8. service是否在main thread中执行,service里面是否能执行耗时的操作?
            默认情况,如果没有显示的指定service所运行的进程, Service和activity是运行在当前app所在进程的main thread(UI主线程)里面  
service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件 )
           在子线程中执行 new Thread(){}.start();
             Thread.currentThread().getName();
             特殊情况 ,可以在清单文件配置 service 执行所在的进程 ,让service在另外的进程中执行.

9. 两个Activity之间怎么传递数据?
         基本数据类型可以通过 Intent 传递数据
              extras.putDouble(key, value)
              intent.putExtra(name,value)  
              // 通过intentputExtra 方法 基本数据类型 都传递
             intent.getStringExtra("key","value");
             intent.getBooleanExtra("key","value")
             Bundlebundle = new  Bundle();
             bumdle.putShort(key,value);
             intent.putExtras(bumdle);
             intent.putExtras(bundle)
            Application 全局里面存放 对象 ,自己去实现自己的application的这个类,基础系统的application , 每个activity都可以取到。
           让对象实现 implements Serializable 接口把对象存放到文件上.  
           让类实现Serializable 接口,然后可以通过 ObjectOutputStream        //对象输出流  
           Filefile = new File("c:\1.obj");
           FileOutputStreamfos  = new FileOutputStream(file);
           ObjectOutputStreamoos = new ObjectOutputStream(fos);
      
           Studentstu = new Student();
           oos.writeObject(stu);
   
           //从文件中把对象读出来  
          ObjectInputStreamois = new ObjectInputStream(arg0);
           Student stu1 = (Student) ois.readObject();
         文件/网络
         intent.setData(Uri)
         Uri.fromFile();  //大图片的传递

10. 怎么在启动一个Activity时就启动一个service?
         在activity的onCreate()方法里面startService();



其他精华资源推荐:

【强荐!】2016年最新Android学习路线图——按此路线图学习月薪过万{ 火速收入}
Android是选择自学还是选择培训?

76 个回复

正序浏览
hxs 初级黑马 2016-11-15 22:24:23
77#
不错不错
回复 使用道具 举报
回复 使用道具 举报
楼主分享的很给力
回复 使用道具 举报
Android里不同activity之间通过Intent传递数据 感觉可以类比到Javaweb中不同的servlet之间通过session共享数据。
回复 使用道具 举报
谢谢分享{:3_53:}
回复 使用道具 举报
果断收藏
顶顶顶顶
回复 使用道具 举报
赞赞赞赞赞赞赞赞赞赞赞赞赞
回复 使用道具 举报
真是相当给力啊
回复 使用道具 举报
每天保持好心情
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
精华 Q@! 收藏
回复 使用道具 举报
顶一个,帅哦
回复 使用道具 举报
感谢分享
回复 使用道具 举报
非常棒 果断收藏
回复 使用道具 举报
不错不错,收藏了
回复 使用道具 举报
楼主 6666
回复 使用道具 举报
6666666666666666
回复 使用道具 举报
回复 使用道具 举报
66666666666
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马