void updateTimes() {
   Iterator<ActiveItem> it = mActiveItems.values().iterator();
   while (it.hasNext()) {
     ActiveItem ai = it.next();
     if (ai.mRootView.getWindowToken() == null) {
       // Clean out any dead views, just in case.
       it.remove();
       continue;
     }
     ai.updateTime(getContext(), mBuilder);
   }
 }
 public ActiveItem bind(RunningState state, RunningState.BaseItem item, StringBuilder builder) {
   synchronized (state.mLock) {
     PackageManager pm = rootView.getContext().getPackageManager();
     if (item.mPackageInfo == null && item instanceof RunningState.MergedItem) {
       // Items for background processes don't normally load
       // their labels for performance reasons.  Do it now.
       RunningState.MergedItem mergedItem = (RunningState.MergedItem) item;
       if (mergedItem.mProcess != null) {
         ((RunningState.MergedItem) item).mProcess.ensureLabel(pm);
         item.mPackageInfo = ((RunningState.MergedItem) item).mProcess.mPackageInfo;
         item.mDisplayLabel = ((RunningState.MergedItem) item).mProcess.mDisplayLabel;
       }
     }
     name.setText(item.mDisplayLabel);
     ActiveItem ai = new ActiveItem();
     ai.mRootView = rootView;
     ai.mItem = item;
     ai.mHolder = this;
     ai.mFirstRunTime = item.mActiveSince;
     if (item.mBackground) {
       description.setText(rootView.getContext().getText(R.string.cached));
     } else {
       description.setText(item.mDescription);
     }
     item.mCurSizeStr = null;
     icon.setImageDrawable(item.loadIcon(rootView.getContext(), state));
     icon.setVisibility(View.VISIBLE);
     ai.updateTime(rootView.getContext(), builder);
     return ai;
   }
 }