ToB企服应用市场:ToB评测及商务社交产业平台

标题: Android Toast表现流程 [打印本页]

作者: 李优秀    时间: 2024-8-2 21:24
标题: Android Toast表现流程
  1. @MainActivity.java
  2. Toast.makeText(MainActivity.this, "xww make toast", Toast.LENGTH_SHORT)
  3. @frameworks/base/core/java/android/widget/Toast.java
  4.     makeText(context, null, text, duration);
  5.         Toast result = new Toast(context, looper);
  6.             mContext = context;  // Toast的context
  7.             mTN = new TN(context, context.getPackageName(), mToken, mCallbacks, looper);
  8. @frameworks/base/core/java/android/widget/ToastPresenter.java
  9.                 mPresenter = new ToastPresenter(context, accessibilityManager, getService(), packageName);
  10.                     mContext = context;  //ToastPresenter的context
  11. @frameworks/base/core/java/android/app/ContextImpl.java
  12.                     mWindowManager = context.getSystemService(WindowManager.class);
  13.                         SystemServiceRegistry.getSystemServiceName(serviceClass);
  14.                             final String serviceName = SYSTEM_SERVICE_NAMES.get(serviceClass);
  15.                             return serviceName;
  16.         View v = ToastPresenter.getTextToastView(context, text);
  17.             View view = LayoutInflater.from(context).inflate(TEXT_TOAST_LAYOUT, null);
  18.             TextView textView = view.findViewById(com.android.internal.R.id.message);
  19.             textView.setText(text);
  20.             return view;
  21.        result.mNextView = v; // Toast的context
  22. .show())
  23.     INotificationManager service = getService();
  24.         sService = INotificationManager.Stub.asInterface(ServiceManager.getService(Context.NOTIFICATION_SERVICE));
  25.     TN tn = mTN;
  26.     tn.mNextView = mNextView; // 设置TN的mNextView
  27.     final int displayId = mContext.getDisplayId();
  28. @frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java
  29.     service.enqueueToast(pkg, mToken, tn, mDuration, displayId);
  30. @frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
  31.         mWindowManagerInternal.addWindowToken(windowToken, TYPE_TOAST, displayId,null
  32.         record = getToastRecord(callingUid, callingPid, pkg, isSystemToast, token, text, callback, duration, windowToken, displayId, textCallback);  // callback等于TN
  33.         return new CustomToastRecord(this, uid, pid, packageName,isSystemToast, token, callback, duration, windowToken, displayId);
  34.             final DisplayContent dc = getDisplayContentOrCreate(displayId, null /* token */);
  35.             new WindowToken.Builder(this, binder, type).setDisplayContent(dc) .setPersistOnEmpty(true).setOwnerCanManageAppTokens(true).setOptions(options).build();
  36.         mToastQueue.add(record);
  37.         showNextToastLocked(false);
  38.             ToastRecord record = mToastQueue.get(0);
  39.             tryShowToast(record, rateLimitingEnabled, isWithinQuota, isPackageInForeground))
  40. @frameworks/base/services/core/java/com/android/server/notification/toast/CustomToastRecord.java
  41.                 record.show();
  42. @frameworks/base/core/java/android/widget/Toast.java
  43.                     callback.show(windowToken);  //TN.show
  44.                         mHandler.obtainMessage(SHOW, windowToken).sendToTarget();
  45.                             void handleMessage(Message msg) {
  46.                                 case SHOW: {
  47.                                     handleShow(token);
  48.                                         mView = mNextView; //获取TN的mNextView
  49.                                         mPresenter.show(mView, mToken, windowToken, mDuration, mGravity, mX, mY, mHorizontalMargin, mVerticalMargin, new CallbackBinder(getCallbacks(), mHandler));
  50.                                             addToastView();
  51. @frameworks/base/core/java/android/view/WindowManagerImpl.java
  52.                                                 mWindowManager.addView(mView, mParams);
  53. @frameworks/base/core/java/android/view/WindowManagerGlobal.java
  54.                                                     mGlobal.addView(view, params, mContext.getDisplayNoVerify(), mParentWindow, mContext.getUserId());    //WindowManagerImpl的mContext
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4