应用数据统计framework修改记录_第1页
应用数据统计framework修改记录_第2页
应用数据统计framework修改记录_第3页
应用数据统计framework修改记录_第4页
应用数据统计framework修改记录_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

型AAAndroid2.3AAndroid4.4Aframework义广播,增加listener回调方简 目的和适用范 定义、缩写和术 参考资 修改目 接口定 应用启动.....................................................................................................................................应用退出.....................................................................................................................................listener回调方式的集成方法 验证方 1、0.31.0计,去除不合理的广播机制,提高整体系统的响应性能,从K7项目开始以listener回调的方式代替之 为了分析设备上应用程序的使用情况,Framework层需要调用应用层的listener回调函数activity被createdlistenerNN应用启动时间Java中的longY启动类型,1:从launcher0:…+import+importfinalintstartActivityMayWait(IApplicationThreadcaller,intStringcallingPackage,Intentintent,StringresolvedType,IBinderresultTo,StringresultWho,intreqode,intstartFlags,StringprofileFile,ParcelFileDescriptorprofileFd,WaitResultoutResult,Configurationconfig,Bundleoptions,intuserId){//CollectinformationaboutthetargetoftheActivityInfoaInfo=resolveActivity(intent,resolvedType,startFlags,profileFile,profileFd,userId);/*[lenovo_fw,liuhj6,e2e_app_usage_statics],appusagestatiticsporting,add*/if((aInfo!=null)&&(aInfo.packageName!=null)&&(aI!=null)){Set<String>categories=intent.getCategories();intflags=intent.getFlags();intstartType=if((categories==||!categories.contains(Intent.CATEGORY_HOME)){if((flags&(Intent.FLAG_ACTIVITY_NEW_TASK&&Intent.ACTION_MAIN.equals(intent.getAction())&&(categories!=null)&&categories.contains(Intent.CATEGORY_LAUNCHER)){startType=1;//SmartAPI.START_PARA_LAUNCHER;}if(aInfo!=null&&aInfo.packageName!=null)longdate=Intentintent1=newintent1.putExtra("Type",1);intent1.putExtra("Package",aInfo.packageName);intent1.putExtra("Time",date);intent1.putExtra("Where",startType);

if(ActivityManagerNative.isSystemReady()){Slog.v(TAG,"sendsmartintentfornewactivity"+Where

Slog.v(TAG,"notifyappswitchfornewactivity"+finalStringpackageName=aInfo.packageName;finalinttype=startType;Threadthread=newThread(){@Overridepublicvoidrun(){}}}}} listenerNN应用启动时间Java中的longY退出类型,0:1:privatefinalvoidhandleAppDiedLocked(ProcessRecordapp,booleanrestarting,booleanallowRestart){/*[lenovo_fw,liuhj6,e2e_app_usage_statics],appusagestatiticsporting,add*/if(mProcessesReady){if(!=null&&.packageName!=null)intendType=if(app.crashing)endType=}if(.packageName!=null)longdate=Intentintent=newintent.putExtra("Type",0);intent.putExtra("Package",.packageName);intent.putExtra("Time",date);intent.putExtra("Flag",endType);Slog.w(TAG,"sendsmartintentpackageName="+.packageName);Slog.w(TAG,"notifyappswitchquitpackageName="+.packageName);finalStringpackageName=.packageName;finalinttype=Threadthread=newThread(){@Overridepublicvoidrun()notifyAppSwitch(packageName,false,}}}}}2.3listener回调方式的集成方1、在./frameworks/base/Android.mkLOCAL_SRC_FILES+=2、在./frameworks/base/core/java/android/app/ActivityManager.java中增加:publicvoidregisppStaistener(String[]pkgs,finalAppStaistenerl){tryActivityManagerNative.getDefault().regisppStaistener(pkgs,newIAppStaistener.Stub(){publicvoidappStarted(Stringname,longwhen,intstartType)throwsRemoteException{l.appStarted(name,when,startType);}publicvoidappQuit(Stringname,longwhen,intquitType)throwsRemoteException{l.appQuit(name,when,quitType);}}catch(RemoteExceptione){}}

publicbooleanonTransact(intcode,Parceldata,Parcelreply,intflags)throwsRemoteException{switch(code)

String[]pkgs=data.readStringArray(); istenerobserver=IAppSta istener(pkgs,observer);return}classActivityManagerimplements{…publicvoidregis istener(String[]pkgs,IAppSta istenerl)throwsRemoteException{Parceldata=Parcel.obtain();Parcelreply=Parcel.obtain();data.writeStrongBinder(l!=null?l.asBinder():null);}}appsta…publicvoidregisppStaistener(String[]pkgs,IAppStaistenerl)throws…、 +importandroid.app.IAppStapublicfinalclassActivityManagerServiceextendsActivityManagerNativeimplementsWatchdog.Monitor,BatteryStatsImpl.BatteryCallback{finalRemoteCallbackList<IAppStaistener>mAppSta=new publicvoidregis istener(String[]pkgs,IAppSta istenerl){synchronized(mAppSta isteners){ isteners.register(l,}}voidnotifyAppSwitch(Stringpkg,booleanresumed,inttype){synchronized(mAppSta isteners){Slog.d(TAG,"notifyAppSwitchresumed:"+resumed+";pkg:" +pkg);if(pkg==null)return;try

finalintN=mAppSta for(inti=0;i<N;i++){longdate=System.currentTimeMillis();if(resumed){Slog.d(TAG,pkg+":resumed,notify isteners.getBroadcastItem(i).appStarted(pkg,date,}elseSlog.d(TAG,pkg+":pausedorcrashed,notifyapp");mAppStaisteners.getBroadcastItem(i).appQuit(pkg,date,type);}}}catch(RemoteExceptione)Slog.e(TAG,"FoundexceptioninnotifyAppSwitch:",}}}}12adblogcatV/ActivityManager(1052):notifyappswitchfornewactiv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论