Android
来源:互联网 发布:java简易订餐系统 编辑:程序博客网 时间:2024/06/07 06:11
1.本地数据库自动更新的工作机制
- 开启一个服务,定时访问服务器
- 进行版本对比,如果最新版本比较高,获取需要更新的内容
- 将新内容插入到本地数据库中
2.如何处理横竖屏切换
- 指定屏幕朝向
在清单文件对应的Activity中配置android:screenOrientation=”landscape”(横屏,portrait是竖屏); 设置屏幕旋转时不重新创建Activity
在清单文件对应的Activity中配置android:configChanges=”keyboardHidden|orientation|screenSize”,最好这三个都配置,否则不能适配所有机型或sdk版本。
横竖屏切换时会走Activity的onConfigurationChanged()方法@Overridepublic void onConfigurationChanged(Configuration newConfig) { // 当新设置中,屏幕布局模式为横排时 if(newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ //TODO 某些操作 }else{ //TODO 某些操作 } super.onConfigurationChanged(newConfig);}
3.系统控件的样式在哪里定义
- 找到文件:sdk/platforms/某个版本/data/res/values/styles.xml
搜索关注的控件,如ProgressBar
<style name="Widget.ProgressBar.Horizontal"> //indeterminate不确定 <item name="android:indeterminateOnly">false</item> //进度条使用的图片 <item name="android:progressDrawable">@android:drawable/progress_horizontal</item> //进度不确定的时候使用的图片,如安装APK时系统的进度条 <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item> <item name="android:minHeight">20dip</item> <item name="android:maxHeight">20dip</item></style>
4.Fragment添加到Activity上有哪些步骤?
//获得管理器FragmentManager fm = getSupportFragmentManager();//获得切换Fragment的帮助类,有add添加、delete删除、replace替换、hide隐藏、show显示FragmentTransaction ft = fm.beginTransaction();//创建FragmentCleanCacheFragment f1 = new CleanCacheFragment();ft.replace(R.id.fl_container, f1);//提交切换Fragment的事务ft.commit();
5.Fragment的生命周期
onAttach():Fragment对象跟Activity关联时
onCreate():Fragment对象的初始创建时
onCreateView():创建Fragment的View对象时
onActivityCreate():所依附的Activity对象已经完成了Activity.onCreate()方法时
onStart():界面即将显示给用户,当Activity的onStart方法调用时
onResume():可以获取焦点与用户交互,当Activity的onResume调用时
onPause():Activity被遮挡不可获取焦点调用了onPause时,或者Activity(或其他容器)打开另一个Fragment,当前Fragemnt无法获取焦点时
onStop():Activity不可见调用了onStop()时,或者Activity(或其他容器)打开另一个Fragment当前Fragment不再显示给用户时
onDestroyView():Fragment中的View对象即将被从当前界面中移除时
onDestroy():Fragment对象被销毁时
onDetach():在Fragment对象不再跟它依附的Activity关联的时候,方法会立即被调用
6.缓存
路径:data/data/包名/cache。用于存放临时文件,当系统空间不足时会清空该目录数据//获取缓存文件夹context.getCacheDir();
7.如何从应用源码中定位实现逻辑
- 通过UI上一些字符串进行全局搜索,Ctrl+H 中的 FileSearch
- 通过string.xml中对应字符串id定位layout布局
- 通过layout布局中的id,定位代码中该View的事件逻辑
8.如何获取应用的缓存
- 经过分析源码,发现获取应用的缓存可以使用packageManager.getPackageSizeInfo()方法
- pm的getPackageSizeInfo()方法为hide,无法直接调用,所以使用反射调用该方法
- getPackageSizeInfo()需要两个参数,第一个为包名,第二个为一个回调接口IPackageStatsObserver.Stub这种形式一般为远程调用系统服务,需要使用aidl,将aidl文件拷贝到本项目中,注意要使用aidl文件中的原始包名
代码实现,需要权限
//1.获得packageManager对象PackageManager pm = getPackageManager();//2.pm的getPackageSizeInfo()方法为hide,使用反射调用Method[] methods = PackageManager.class.getDeclaredMethods();for(Method method:methods){ if("getPackageSizeInfo".equals(method.getName())){ try { //3.第二个参数需要使用aidl创建 method.invoke(pm, "com.mythmayor.testcache",new IPackageStatsObserver.Stub(){ @Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { long cacheSize = pStats.cacheSize; System.out.println("缓存大小:"+cacheSize); } }); } catch (Exception e) { e.printStackTrace(); } return; }}
9.如何清除一个应用的缓存
需要应用为系统应用
packageManager.deleteApplicationCacheFiles(String packageName,IPackageDataObserver observer)权限:要求系统应用<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
打开应用详细信息界面
Intent intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS");intent.addCategory(Intent.CATEGORY_DEFAULT);intent.setData(Uri.parse("package:"+info.packName));startActivity(intent);
10.清除全部应用缓存
利用系统漏洞,google忘记把CLEAR_APP_CACHE权限声明为只有系统应用才可以申请的权限
//建议Long.MAX_VALUE。PackageManager.freeStorageAndNotify(long freeStorageSize, IPackageDataObserver observer);//权限<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- android:
- CentOS 重置root密码及修改密码
- 金融数量分析2:Markowitz均值方差模型
- 09.java语言基础-小数类型(float-double)
- iOS-Best Practices for Interacting with a Remote Peripheral Device(API Reference) the sixth part
- Shell脚本——获取脚本所在的绝对路径
- Android
- Spring AOP中pointcut expression表达式解析
- angular 阻止冒泡
- 2016CCPC东北地区大学生程序设计竞赛
- Android 把文件转换成字符流
- iOS开发——密码学
- 前台开发总结08——20170607
- Laravel安装与配置
- 10.java语言基础-字符类型(char)