1、对Android近期任务列表格Recent Applications地简单分析资料报告对Android近期任务列表(Recent Applications)的简单分析分类:Android开发2013-12-31 11:061599人阅读评论(0)收藏举报.cnblogs./coding-way/archive/2013/06/05/3118732.html这里的近期任务列表就是长按Home键出来的那个Dialog,里面放着近期打开过的应用,当然3.0以上系统的多任务切换键也是。这个Dialog的实现在Android源码的/frameworks/base/policy/src/android/i
2、nternal/policy/impl/RecentApplicationsDialog.java中。接下来就对这个源码分析一下。javaview plaincopy1.publicclassRecentApplicationsDialogextendsDialogimplementsOnClickListener2./Elementsfordebuggingsupport3./privatestaticfinalStringLOG_TAG=RecentApplicationsDialog;4.privatestaticfinalbooleanDBG_FORCE_EMPTY_LIST=fals
3、e;5.6.staticprivateStatusBarManagersStatusBar;7.8.privatestaticfinalintNUM_BUTTONS=8;9.privatestaticfinalintMAX_RECENT_TASKS=NUM_BUTTONS*2;/allowforsomediscards10.11.finalTextViewmIcons=newTextViewNUM_BUTTONS;12.ViewmNoAppsText;13.IntentFiltermBroadcastIntentFilter=newIntentFilter(Intent.ACTION_CLOS
4、E_SYSTEM_DIALOGS);14.15.classRecentTag16.ActivityManager.RecentTaskInfoinfo;17.Intentintent;18.19.20.HandlermHandler=newHandler();21.RunnablemCleanup=newRunnable()22.publicvoidrun()23./dumpextramemorywerehangingonto24.for(TextViewicon:mIcons)25.icon.setCompoundDrawables(null,null,null,null);26.icon.
5、setTag(null);27.28.29.;30.31.publicRecentApplicationsDialog(Contextcontext)32.super(context,.android.internal.R.style.Theme_Dialog_RecentApplications);33.34.35.36./*37.*Wecreatetherecentapplicationsdialogjustonce,anditstaysaround(hidden)38.*untilactivatedbytheuser.39.*40.*seePhoneWindowManager#showR
6、ecentAppsDialog41.*/42.Override43.protectedvoidonCreate(BundlesavedInstanceState)44.super.onCreate(savedInstanceState);45.46.Contextcontext=getContext();47.48.if(sStatusBar=null)49.sStatusBar=(StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE);50.51.52.Windowwindow=getWindow();53.
7、window.requestFeature(Window.FEATURE_NO_TITLE);54.window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);55.window.setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,56.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);57.window.setTitle(Recents);58.59.setContentView(.android.internal.
8、R.layout.recent_apps_dialog);60.61.finalWindowManager.LayoutParamsparams=window.getAttributes();62.params.width=WindowManager.LayoutParams.MATCH_PARENT;63.params.height=WindowManager.LayoutParams.MATCH_PARENT;64.window.setAttributes(params);65.window.setFlags(0,WindowManager.LayoutParams.FLAG_DIM_BE
9、HIND);66.67./默认显示8个68.mIcons0=(TextView)findViewById(.android.internal.R.id.button0);69.mIcons1=(TextView)findViewById(.android.internal.R.id.button1);70.mIcons2=(TextView)findViewById(.android.internal.R.id.button2);71.mIcons3=(TextView)findViewById(.android.internal.R.id.button3);72.mIcons4=(TextV
10、iew)findViewById(.android.internal.R.id.button4);73.mIcons5=(TextView)findViewById(.android.internal.R.id.button5);74.mIcons6=(TextView)findViewById(.android.internal.R.id.button6);75.mIcons7=(TextView)findViewById(.android.internal.R.id.button7);76.mNoAppsText=findViewById(.android.internal.R.id.no
11、_applications_message);77.78./关键在哪,你懂得.79.for(TextViewb:mIcons)80.b.setOnClickListener(this);81.82.83.84.Override85.publicbooleanonKeyDown(intkeyCode,KeyEventevent)86.if(keyCode=KeyEvent.KEYCODE_TAB)87./IgnoreallmetakeysotherthanSHIFT.Theappswitchkeycouldbea88./fallbackactionchordedwithALT,METAoreve
12、nCTRLdependingonthekeymap.89./DPadnavigationishandledbytheViewRootelsewhere.90.finalbooleanbackward=event.isShiftPressed();91.finalintnumIcons=mIcons.length;92.intnumButtons=0;93.while(numButtonsnumIcons&mIconsnumButtons.getVisibility()=View.VISIBLE)94.numButtons+=1;95.96.if(numButtons!=0)97.intnext
13、Focus=backward?numButtons-1:0;98.for(inti=0;inumButtons;i+)99.if(mIconsi.hasFocus()100.if(backward)101.nextFocus=(i+numButtons-1)%numButtons;102.else103.nextFocus=(i+1)%numButtons;104.105.break;106.107.108.finalintdirection=backward?View.FOCUS_BACKWARD:View.FOCUS_FORWARD;109.if(mIconsnextFocus.reque
14、stFocus(direction)110.mIconsnextFocus.playSoundEffect(111.SoundEffectConstants.getContantForFocusDirection(direction);112.113.114.115./ThedialogalwayshandlesthekeytopreventtheViewRootfrom116./performingthedefaultnavigationitself.117.returntrue;118.119.120.returnsuper.onKeyDown(keyCode,event);121.122
15、.123./*124.*Dismissthedialogandswitchtotheselectedapplication.125.*/126.publicvoiddismissAndSwitch()127.finalintnumIcons=mIcons.length;128.RecentTagtag=null;129.for(inti=0;i=0)163./Thisisanactivetask;itshouldjustgototheforeground.164.finalActivityManageram=(ActivityManager)165.getContext().getSystem
16、Service(Context.ACTIVITY_SERVICE);166.am.moveTaskToFront(tag.info.id,ActivityManager.MOVE_TASK_WITH_HOME);167.elseif(tag.intent!=null)168.tag.intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY169.|Intent.FLAG_ACTIVITY_TASK_ON_HOME);170.try171.getContext().startActivity(tag.intent);172.catch(
17、ActivityNotFoundExceptione)173.Log.w(Recent,Unabletolaunchrecenttask,e);174.175.176.177.178./*179.*Setupandshowtherecentactivitiesdialog.180.*/181.Override182.publicvoidonStart()183.super.onStart();184.reloadButtons();185.if(sStatusBar!=null)186.sStatusBar.disable(StatusBarManager.DISABLE_EXPAND);18
18、7.188.189./receivebroadcasts190.getContext().registerReceiver(mBroadcastReceiver,mBroadcastIntentFilter);191.192.mHandler.removeCallbacks(mCleanup);193.194.195./*196.*Dismisstherecentactivitiesdialog.197.*/198.Override199.publicvoidonStop()200.super.onStop();201.202.if(sStatusBar!=null)203.sStatusBa
19、r.disable(StatusBarManager.DISABLE_NONE);204.205.206./stopreceivingbroadcasts207.getContext().unregisterReceiver(mBroadcastReceiver);208.209.mHandler.postDelayed(mCleanup,100);210.211.212./*213.*Reloadthe6buttonswithrecentactivities214.*/215.privatevoidreloadButtons()216.217.finalContextcontext=getC
20、ontext();218.finalPackageManagerpm=context.getPackageManager();219.finalActivityManageram=(ActivityManager)220.context.getSystemService(Context.ACTIVITY_SERVICE);221.finalListrecentTasks=222.am.getRecentTasks(MAX_RECENT_TASKS,ActivityManager.RECENT_IGNORE_UNAVAILABLE);223.224.ActivityInfohomeInfo=225.newIntent(Intent.ACTION_MAIN).add
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1