泄密:黑马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是选择自学还是选择培训?
|