三、Storage框架整理

ANSYS Workbench瞬态结构分析(1)时域分析 本文围绕瞬态结构分析展开。首先阐释其概念与理论基础,涵盖控制方程及数值求解方法。接着详述在 ANSYS Workbench 中进行瞬态分析的操作流程,以音叉为例,介绍从创建分析系统、材料定义、几何处理与网格划分,到边界条件与载荷设置、求解器设置及结果后处理的各步骤。之后对分析结果进行探讨,并针对计算不收敛、计算时间过长等常见问题给出调试技巧,旨在为读者提供全面的瞬态结构分析知识与实践指导。 阅读详情

转自:http://blog.sina.com.cn/s/blog_6100a4f10101ee40.html

 storage功能相关模块

  • MountService.java

              base/services/java/com/android/server/MountService.java

  • PackageManagerService.java

              base/services/java/com/android/server/pm/PackageManagerService.java

  • StorageManager.java

              base/core/java/android/os/storage/StorageManager.java

  • DefaultContainerService.java

              base/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java

  • Settings—storage/application

              packages/apps/Settings/src/com/android/settings

  • Vold框架

              system/vold

  • Kernel

 StorageManager

2.1 方法//变量

package                                                                                                   

   android.os.storage  

 class                                                                                                     

   StorageManager                                                                                           

   MountServiceBinderListener [StorageManager]                                                             

   ObbActionListener [StorageManager]                                                                       

   ObbListenerDelegate [StorageManager]                                                                    

   ObbStateChangedStorageEvent [StorageManager]                                                            

   StorageEvent [StorageManager]                                                                           

   UmsConnectionChangedStorageEvent [StorageManager]                                                       

   StorageStateChangedStorageEvent [StorageManager]                                                        

   ListenerDelegate [StorageManager]                                                                       

  field                                                                                                     

   TAG [StorageManager]                                                                                    

   PROP_SD_DEFAULT_PATH [StorageManager]                                                                   

   PROP_SD_INTERNAL_PATH [StorageManager]                                                                  

   PROP_SD_EXTERNAL_PATH [StorageManager]                                                                   

   ICS_STORAGE_PATH_SD1 [StorageManager]                                                                   

   ICS_STORAGE_PATH_SD2 [StorageManager]                                                                    

   STORAGE_PATH_SD1 [StorageManager]                                                                       

   STORAGE_PATH_SD2 [StorageManager]                                                                       

   mMTKExternalCacheDir [StorageManager]                                                                   

   mMountService [StorageManager]                                                                          

   mTgtLooper [StorageManager]                                                                              

   mBinderListener [StorageManager] 

   mListeners [StorageManager]                                                                             

   mNextNonce [StorageManager]                                                                              

   mObbActionListener [StorageManager]                                                                     

   mListeners [StorageManager.ObbActionListener]                                                            

   mObbEventListenerRef [StorageManager.ObbListenerDelegate]                                               

   mHandler [StorageManager.ObbListenerDelegate]                                                           

   nonce [StorageManager.ObbListenerDelegate]                                                              

   path [StorageManager.ObbStateChangedStorageEvent]                                                       

   state [StorageManager.ObbStateChangedStorageEvent]                                                       

   EVENT_UMS_CONNECTION_CHANGED [StorageManager.StorageEvent]                                              

   EVENT_STORAGE_STATE_CHANGED [StorageManager.StorageEvent]                                                

   EVENT_OBB_STATE_CHANGED [StorageManager.StorageEvent]                                                   

   mMessage [StorageManager.StorageEvent]                                                                  

   available [StorageManager.UmsConnectionChangedStorageEvent]                                             

   path [StorageManager.StorageStateChangedStorageEvent]                                                   

   oldState [StorageManager.StorageStateChangedStorageEvent]                                                

   newState [StorageManager.StorageStateChangedStorageEvent]                                               

   mStorageEventListener [StorageManager.ListenerDelegate]                                                  

   mHandler [StorageManager.ListenerDelegate]                                                              

                                                                                                           

 method                                                                                                     

   onUsbMassStorageConnectionChanged [StorageManager.MountServiceBinderListener]                           

   onStorageStateChanged [StorageManager.MountServiceBinderListener]                                       

   onObbResult [StorageManager.ObbActionListener]                                                          

   addListener [StorageManager.ObbActionListener]                                                           

   getNextNonce [StorageManager]                                                                           

   ObbListenerDelegate [StorageManager.ObbListenerDelegate]                                                

   getListener [StorageManager.ObbListenerDelegate]                                                        

   sendObbStateChanged [StorageManager.ObbListenerDelegate]                                                

   ObbStateChangedStorageEvent [StorageManager.ObbStateChangedStorageEvent]

StorageEvent [StorageManager.StorageEvent]                                                                 

   getMessage [StorageManager.StorageEvent]                                                                

   UmsConnectionChangedStorageEvent [StorageManager.UmsConnectionChangedStorageEvent]                      

   StorageStateChangedStorageEvent [StorageManager.StorageStateChangedStorageEvent]                        

   ListenerDelegate [StorageManager.ListenerDelegate]                                                       

   getListener [StorageManager.ListenerDelegate]                                                           

   sendShareAvailabilityChanged [StorageManager.ListenerDelegate]                                          

   sendStorageStateChanged [StorageManager.ListenerDelegate]                                               

   from [StorageManager]                                                                                   

   StorageManager [StorageManager]                                                                          

   registerListener [StorageManager]                                                                       

   unregisterListener [StorageManager]                                                                      

   enableUsbMassStorage [StorageManager]                                                                   

   disableUsbMassStorage [StorageManager]                                                                  

   isUsbMassStorageConnected [StorageManager]                                                              

   isUsbMassStorageEnabled [StorageManager]                                                                

   mountObb [StorageManager]                                                                                

   unmountObb [StorageManager]                                                                             

   isObbMounted [StorageManager]                                                                            

   getMountedObbPath [StorageManager]                                                                      

   getVolumeState [StorageManager]                                                                         

   getVolumeList [StorageManager]                                                                          

   getVolumePaths [StorageManager]                                                                         

   getPrimaryVolume [StorageManager]                                                                        

   getPrimaryVolume [StorageManager]                                                                       

   getDefaultPath [StorageManager]                                                                          

   setDefaultPath [StorageManager]                                                                         

   getMTKExternalCacheDir [StorageManager]                                                                 

   getExternalStoragePath [StorageManager]                                                                 

   getInternalStoragePath [StorageManager]         

 

2.2 工作流程

应用PhoneStatusBarPolicy.java

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java

调用StorageManager的监听注册函数,将监听的StorageEventListener注册到StorageManager中,当有状态变化时,会调用该类的对应函数。通常在具体需要storage状态变化的场景会定义一个新类,继承于StorageEventListener。下面注册到StorageManagerlistener就是继承于StorageEventListener

// storage

mStorageManager=(StorageManager) context.getSystemService(Context.STORAGE_SERVICE);

mStorageManager.registerListener(new com.android.systemui.usb.StorageNotification(context));

com.android.systemui.usb.StorageNotification就是继承于StorageEventListener

1)      registerListener

    public void registerListener(StorageEventListener listener) {

        if (listener == null) {

            return;

        }

        synchronized (mListeners) {

            if (mBinderListener == null ) {

                try {

                    mBinderListener = new MountServiceBinderListener();

                    mMountService.registerListener(mBinderListener);

                } catch (RemoteException rex) {

                    Log.e(TAG, "Register mBinderListener failed");

                    return;

                }

            }

            mListeners.add(new ListenerDelegate(listener));

        }

    }

2)      StorageManagerregisterListener有两个功能,一个是接收其他应用过来的申请,将他们的StorageEventListener,转换成ListenerDelegate 对象,然后保存在mListeners 这个数组中。

     private List<ListenerDelegate> mListeners = new ArrayList<ListenerDelegate>();

mListeners.add(new ListenerDelegate(listener));

       另外一个功能就是向mountService注册listenerStorageManager也是个中间者,拿不到一手信息,需要从上线拿到资源,所以它需要向mountService注册listener

                    mBinderListener = new MountServiceBinderListener();

                    mMountService.registerListener(mBinderListener);

       注册进去的类型为MountServiceBinderListener,是MountServiceListener的实现。

       特别注意:在mountService中,对注册进来的MountServiceBinderListener又做了一层处理,恶心的是两个类是同一个名字。

MountServiceBinderListener bl = new MountServiceBinderListener(listener);

参数listener的类型是上面蓝色的,从StorageManager传过来,红色的是mountService中的类,类似于StorageManager中的ListenerDelegate。实现如下:

    private final class MountServiceBinderListener implements IBinder.DeathRecipient {

        final IMountServiceListener mListener;

        MountServiceBinderListener(IMountServiceListener listener) {

            mListener = listener;

        }

StorageManagerMountService都有一个用来记录外边注册进来的listener的数组mListeners,但是使用的类型都是自己包中定义的类,都对传进来的进行了处理。

3)      从底向上的触发

MountServiceonEvent会收到底层的调用,进而触发相应的动作,例如调用updatePublicVolumeState,这里边就会调用注册进来的listener的成员函数; bl.mListener.onStorageStateChanged。这样就进入到了StorageManager,其中的listenerMountServiceBinderListeneronStorageStateChanged会被触发。进而依次触发每一个注册到StorageManagerlistenersendStorageStateChanged,发出EVENT_STORAGE_STATE_CHANGED消息。在每个listener注册到StorageManager时,通过ListenerDelegate进行过一次打包,在其构造函数中对每个listener创建了一个handler,不停的接收消息并处理。当接收到EVENT_STORAGE_STATE_CHANGED后就调用注册进来的listeneronStorageStateChanged方法。如上即为com.android.systemui.usb.StorageNotificationonStorageStateChanged函数,所以该类的onStorageStateChanged方法需要重载。

以上内容参考了这篇文章:usb状态相关

2.3 功能调用

上面介绍的是上层如何获取系统及底层信息的中断通知的方式,除了这种被动通知状态改变的行为以外,更多的则是应用主动的获取系统的storage信息。这个功能就相对简单、直白了,可以直接调用StorageManager的成员方法。

       1) ums功能的使能/禁能/状态查询

       2)obb的挂载/卸载及查询

       3)获取分区的所有信息:分区列表/挂载点状态/主分区路径等

4) 应用的默认存储路径的管理及内外置卡的路径获取

       JB的挂载路径较ics做了更新:

    private static final String ICS_STORAGE_PATH_SD1 = "/mnt/sdcard";

    private static final String ICS_STORAGE_PATH_SD2 = "/mnt/sdcard2";

    private static final String STORAGE_PATH_SD1 = "/storage/sdcard0";

    private static final String STORAGE_PATH_SD2 = "/storage/sdcard1";

       JB版本以后,为了兼容ICS,将/mnt/sdcard链接到/storage/sdcard0

2.4 使用方法

mStorageManager=(StorageManager) context.getSystemService(Context.STORAGE_SERVICE);

mStorageManager.functions;

2.5 StorageManager总结

如果外界需要知道系统的storage信息,直接调用StorageManager的方法。那么如果需要实时的知道状态的改变,就需要派一个信使驻扎在StorageManager家里,当有状态变化时,StorageManager会通知驻扎在他家的信使,listener。这就是为什么要安排驻京人员,能够及时的拿到一手信息。

 MountService

3.1 MountServiceStorageManager的交互   

紧接上面的StorageManager,MountService是为framework层和StorageManager服务的,StorageManager为应用程序服务。

-----------------------下面来自网友总结

MountService是运行在SystemService这个进程中,所以上层应用无法直接访问,StorageManager就是提供给应用层来访问存储服务的,它通过Binder机制与MountService所在进程进行通信,将使用者的请求转发进MountService中进行处理。目前StorageManager中支持的方法有enableUsbMassStoragedisableUsbMassStorageisUsbMassStorageConnectedisUsbMassStorageConnected。在StorageManager的构造函数中,还通过调用MountService中的registerListener函数来注册listenerMountService,同时,它自己也提供了registerListener函数供其它应用来注册listener,这样,当MountService知道存储设备状态变更时,会调用StorageManagerlistener的方法,而StorageManager又会继续回调上去,上层应用也就可以做相应的操作,比如图示的更新等。

MountService是一个服务类,在ServiceManager中注册为系统服务,提供对外部存储设备的管理、查询等服务,并在存储设备状态变更时发出通知。MountService起到了一个承上启下的作用,向上公开方法供上层对存储设备进行操作(enable/disable/mount…),并在存储设备状态变更时发出通知。向下接收Vold发来的事件(设备状态变更,设备插入,设备移除等),同时也会将命令发送给Vold,进行更底层的操作。

------------------

3.2 工作流程

工作流程有几个:首先是构造函数的准备工作、一些接口的被调用、以及监听回调。

1)      构造函数

Mediatek/custom/mt8389_tablet_a3v2/resource_overlay/generic/frameworks/base/core/res/res/xml/

<StorageList xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- removable is not set in nosdcard product -->

    <storage android:mountPoint="/storage/sdcard0"

             android:storageDescription="@string/storage_usb"

           android:allowMassStorage="true"

           android:mtpReserve="10485760"

             android:primary="true" />

    <storage android:mountPoint="/storage/sdcard1"

             android:storageDescription="@string/storage_sd_card"

             android:removable="true"

           android:allowMassStorage="true"

           android:mtpReserve="10485760"

             android:primary="false" />

<storage android:mountPoint="/mnt/usbotg"

             android:storageDescription="@string/storage_external_usb"

             android:removable="true"

             android:primary="false" />                                                                                      

</StorageList>

但是vold 中关于外部存储器的挂载路径是在

mediatek /config/mt8389_tablet_a3v2/vold.fstab文件中指定的,

 dev_mount sdcard /storage/sdcard0 emmc@fat /devices/platform/goldfish_mmc.0

                                                               /devices/platform/mtk-msdc.0/mmc_host

  dev_mount sdcard2 /storage/sdcard1 auto /devices/platform/goldfish_mmc.1

                                                               /devices/platform/mtk-msdc.1/mmc_host

dev_mount usbotg /mnt/usbotg auto /devices/platform/mt_usb

                                                               /devices/platform/musbfsh_hdrc

       所以这个xmlvold.fstab的路径必须统一。

readStorageList函数通过解析xml,丰富了系统的分区信息。mVolumesmVolumeMapmPrimaryVolume 

2)      intent 接收处理

private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

            String action = intent.getAction();

通过在构造函数中注册intentfilter,接收系统发出的intent,执行相应的动作。

       3) Callback from NativeDaemonConnector

MountService注册到NativeDaemonConnector 的两个回调函数:onDaemonConnectedonEvent。在构造函数创建NativeDaemonConnector时,将MountService植入进了NativeDaemonConnector

onDaemonConnectedNativeDaemonConnector线程开始运行,创建socket监听时,执行一次。onEvent是在listenToSocket每次读取socket信息,然后通过mCallbackHandler发送消息,随后在handleMessage中调用onEvent

vold发生动作时,通过NativeDaemonConnector完成向上的通知。

NativeDaemonConnectorvold使用的是socket连接,大概使用流程如下:

{

LocalSocket socket = null;

socket = new LocalSocket();//创建socket

//创建目的地的socket地址

LocalSocketAddress address = new LocalSocketAddress(mSocket,

LocalSocketAddress.Namespace.RESERVED);//mSocketà "vold"

socket.connect(address);//连接目的socket

InputStream inputStream = socket.getInputStream()//获取inputStream

inputStream.read(buffer, start, BUFFER_SIZE - start);//读取socket数据

}

init.rc中,vold服务启动时,创建与framework通讯的socket

service vold /system/bin/vold

    class core

    socket vold stream 0660 root mount                                                                                      

    ioprio be 2

3)功能调用

              setUsbMassStorageEnabled,有其他功能直接调用。

mountVolume----àdoMountVolume-------àmConnector.execute(cmd);

3.3 使用方法

1)定义变量

private IMountService mMountService;

2)获取实例

mMountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));

    3)调用功能

mMountService.registerListener(mBinderListener);

3.4 MountService总结

MountService是一个核心处理功能,承上启下。他的具体功能通过他提供的各种方法来体现。如何工作上面的工作流程已经涵盖。

 volume demo

参考文档:

http://terryblog.blog.51cto.com/1764499/826656

android系统vold透析

这两篇文章已经讲的很好,下面只是部分功能点的说明。

         4.1 vold/kernel简介

----------网友

kernel层能检测到有新的设备接入,加载相应的驱动,但如何通知用户层呢?这就是sysfs的工作,内核中的sysfs机制要求当有新的驱动加载时给用户层发送相应的event.但这些event只尽告知的义务,具体怎么处理,这就是vold的事了。

uevent由内核发出,通过netlink sokect来传递给vold,在kobject被创建的时候,就会发生uevent的传递。对于未传递的uevent,会在kset下产生uevent文件,这是供用户态触发uevent使用的,通过向uevent档写入actionaddremove等),可以触发一个uevent,这些uevent可以被vold捕获,从而完成未完成的vold处理。在系统启动的时候,vold未启动的时候,这些uevent写入了uevent档,vold启动后,会扫描sys目录查找uevent,然后触发它们,来完成之前未完成的事宜。uevent文件的内容,就是uevent事件的数据。

Vold.fstab文件中的设备路径是设备在sys下的路径,并不是kernel为该设备创建的节点:

dev_mount sdcard /storage/sdcard0 emmc@fat /devices/platform/goldfish_mmc.0

                                                               /devices/platform/mtk-msdc.0/mmc_host

#######################

## Regular device mount

##

## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...>

## label        - Label for the volume

## mount_point  - Where the volume will be mounted

## part         - Partition # (1 based), or 'auto' for first usable partition.

## <sysfs_path> - List of sysfs paths to source devices

######################

Kernel 创建完设备节点后又再sys下创建了相关的内容,进而发出了uevent,让vold中的socket,NetLinkManager.cpp来处理,进而根据vold.fstab的配置挂载到指定的目录。那么kernel是如何将sys下创建的目录对象和具体的设备对应起来的呢?todo:sys

4.2 vold 代码流程

       1)入口:System/vold/main.c

              a)创建3vold框架使用的对象

VolumeManager *vm;

    CommandListener *cl; 接收上层MountService的命令,分析后转给volumeManager,处理后返给MountService或者交给volume执行具体操作。

NetlinkManager *nm; 创建与内核通讯的socket,接收底层的信息,交给volumeManager

b)解析/etc/vold.fstab

       process_config

2)netlinkManager

3)commandListener

4)volumeManager

分区管理类,volume.cpp代理人。真正的分区动作都在volume.cpp来完成。

5)其他文件

Fat.cpp/bicr.cpp/Ext4.cpp

        这些都是volume等配套的具体功能文件,最后一个环节。 

2013-7-31: voldkernel配合工作的流程:首先vold在开始执行时,通过解析vold.fstab得知了该设备用户层最终需要管理的存储设备分区信息,针对需要挂载的分区信息,创建对应的DirectVolume,放入VolumeManager中进行管理。解析vold.fstab时如果是emmc是要从/proc/emmc中获取信息的,以防止vold.fstab写的信息有误。所以上面这部分工作只是准备工作,意思是当有对应的分区设备在内核空间出现时,用户空间应该如何去处理,挂载还是不挂载,挂载点是哪里。那么当内核空间的设备创建时通过uevent机制传递到netlinkManager时,会调用到netlinkHandler.cpponEvent,进入调用VolumeManagerhandleBlockEvent,意思是处理块设备变化,由于开始时已经将vold.fstab中的分区信息创建对应的DirectVolume添加到了VolumeManager容器中,然后找出容器中的某个DirectVolume执行handleBlockEvent


基于ROS下的安卓手机图像和IMU跑ORB-SLAM3 接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无 阅读详情

相关推荐

深度强化学习调参技巧:以DQN、DDPG、TD3、PPO、SAC等算法为例

深度强化学习调参技巧:以D3QN、DDPG、TD3、PPO、SAC算法为例

丨汀、的博客 3374

Android中使用Kotlin或Java都可以实现 `android.os.storage`

需要注意的是,在Android应用程序中打开.xlsx文件,需要使用合适的应用程序或库来读取和处理.xlsx文件。你可以使用第方库来读取.xlsx文件并将其显示在你的应用程序中。在这个示例代码中,将“file_path”替换为.xlsx文件的完整路径。如果文件存在,代码将执行“文件存在”部分,否则执行“文件不存在”部分。可以使用Java中的File类来检查文件是否存在,这也适用于Android应用程序。这将启动一个ACTION_VIEW Intent,并显示一个列表,用于选择要在其中打开文件的应用程序。

[Blog][Domain] programb.blog.csdn.net 724

YOLOv11改进策略【卷积层】| DEConv: 强度信息与梯度特征融合的细节增强 适用于小目标与细节目标检测任务

本文记录的是利用 模块优化 的目标检测网络模型。(Detail-Enhanced Convolution,细节增强卷积)的设计旨在,解决 目标检测网络中传统普通卷积缺乏目标细节相关先验、对小目标边缘、目标与背景边界等关键细节捕捉能力不足的问题,同时避免引入额外参数量与计算开销,以适配 对实时推理性能与检测精度的双重需求。DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided atte

Limiiiing的博客 1415

kubernetes进阶之路(十四)~~~Storage系列之Volume

1 Volume Volume:https://kubernetes.io/docs/concepts/storage/volumes/ On-disk files in a Container are ephemeral, which presents some problems for non-trivial applications when running in Containers. ...

qq_33996921的博客 932

2024/7/24日记

二、测试机连接pc,log调试指令。一、storage代码梳理。

weixin_51520435的博客 345

Android_StorageManager存储模块

Android 外部存储空间由 Vold 服务和 StorageManagerService 系统服务共同管理。外部实体存储卷的装载由 Vold 处理,准备好后上报给 StorageManagerService,然后再将其提供给应用。在 Android 8.0 及以后,MountService 服务已经更名为 StorageManagerServic,并且 StorageManagerService 与 Vold 的通信由 socket 变更为 binder 方式。层级结构主要文件代码路径。

Yang_Mao_Shan的博客 4539

Android Volume 挂载、存储流程

Android Volume 存储流程。

dnfkr的博客 3145

android下usb框架系列文章---(3)Storage框架整理

Storage框架整理storage功能相关模块 MountService.java              base/services/java/com/android/server/MountService.java PackageManagerService.java              base/services/java/com/android/serve

u011279649的专栏 2493

Android 10 Scoped Storage

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

2401_83916355的博客 1027

Android 10 Scoped Storage(2)

今年发布的 Android 10 引入了全新的 Scoped Storage,恰巧 Android Dev Simmit 上面也提到了相关的内容,我会结合大会中的讲解以及我自己的理解,为大家带来 Scoped Storage 的介绍,以及作为开发者来说,哪些变化是需要我们注意的。没关注的小伙伴记得关注订阅鸭!我们回到最开头的问题:为什么 Android 系统文件夹如此混乱?那是因为一旦 App 拿到了 WRITE_EXTERNAL_STORAGE

2301_79985012的博客 1095

Storage封装

Storage封装 一.cookie,localstorage,sessionstorage者区别: 存储大小:Cookie 4K Storage 5M 有效期:Cookie拥有有效期,localstorage永久存储,sessionstorage储存在内存中,随浏览器关闭而消失 Cookie会发送到服务器端,存储在内存中(为什么浏览器和服务端会认识你呢?张登录获取张自己的用户信息,为什么能把张的用户信息返回给张呢,因为我们前端把cookie发送给服务器端,告诉他们我是张) sessions

qq_25503949的博客 611

Storage框架整理

storage功能相关模块 MountService.java              base/services/java/com/android/server/MountService.java PackageManagerService.java              base/services/java/com/android/server/pm/PackageM

liangdapo的专栏 1328

Android 10 Scoped Storage(1)

相信所有使用 Android 手机的用户都会有这个疑问,打开自带的文件管理器,简直是一脸懵,十万个为什么瞬间涌上心头。为什么会有这么多文件夹?这些文件夹到底是干嘛的?这个 app 我明明已经卸载了,为什么还有残留文件?这些我看不懂的文件夹,到底能不能删除?万一删除后我手机变砖了怎么办?。

2301_79985012的博客 1007

从崩溃到丝滑:x-file-storage在Solon框架中的文件上传终极解决方案

---

gitblog_01417的博客 1151

windows-ssd_真实而完整的故事-Windows是否对您的SSD进行碎片整理

windows-ssdThere has been a LOT of confusion around Windows, SSDs (hard drives), and whether or not they are getting automatically defragmented by automatic maintenance tasks in Windows. 关于Windows,SS...

cunfuxiao7305的博客 1773

Android 13存储权限适配全解析:从Scoped Storage到MANAGE_EXTERNAL_STORAGE

Android权限管理是移动应用开发中的核心概念,其演进旨在平衡功能需求与用户隐私保护。从早期的粗放式权限模型到如今精细化的Scoped Storage(分区存储)机制,系统通过沙箱化设计限制应用对共享存储空间的随意访问。这一技术变革的价值在于大幅提升数据安全性,防止恶意应用窃取用户敏感文件。在Android 13及更高版本中,存储权限进一步细化为READ_MEDIA_IMAGES等媒体专用权限,同时MANAGE_EXTERNAL_STORAGE作为特殊权限的门槛显著提高。开发者需根据targetSdkVe

dengjuanshou7445的博客 476

HPE收购很忙,不如一起来聊聊Nimble Storage

关于HPE收购Niuble storage的消息已经不是什么头条新闻了,今天写这篇文章的目的不是聊八卦,而是多来点干货。在某种意义上,HPE可以说是收购、拆分、合资商业公司运作集一身的典型代表。关于HPE最近动态请参阅HPE牵手CSC打造DXC延承HP百年家规,HPE最近的一次有关存储的收购就是Simplivty,至此,HPE缺少的存储产品就是Original AFA产品和SDS controller方案了。

Hardy 1万+

Android文件路径解析:/storage/emulated/0/目录结构详解

内部存储:这是每个应用私有的存储空间,其他应用无法访问。路径通常是/data/data/包名/。外部存储:即我们常说的SD卡存储,路径为。应用专属外部存储:位于/storage/emulated/0/android/data/包名/,应用被卸载时这些文件会被自动删除。要时刻考虑不同Android版本的兼容性权限管理是文件操作的核心用户体验比功能全面更重要性能优化在文件管理器中很关键如果你也想尝试开发类似应用,推荐使用InsCode(快马)平台来快速搭建原型。

OnyxPanther23的博客 2万+

PyTorch 源码学习②:从 Tensor 到 Storage

分享关于 PyTorch 核心数据结构 Tensor 的资料和分析。

weixin_43254181的博客 1864

android storage.xml,Android存储相关的业务

最近在搞Android存储相关的业务,什么Internal/External/Primary/Secondary搞得我都看懵了,国内也没什么好的文章系统的讲这个,我就挖挖各类资料,整理一下。1. Internal vs External对于Internal Storage 与 External Storage,官方文档上有这么一段话,描述得很详细了,我翻译了一段下来:所有的Android设备都有两...

weixin_39995108的博客 420

Cassandra Keyspace storage configuration 整理

整理了一下Cassandra官方文档提供的信息 Cassandra版本:2.0 Synopsis CREATE ( KEYSPACE | SCHEMA ) IF NOT EXISTS keyspace_name WITH REPLICATION = map AND DURABLE_WRITES = ( true | false ) map is a map col

yangqiju的专栏 474

QT QCustomPlot实现实时频谱图,瀑布图实时显示

QT仿信号源实现实时频谱图,瀑布图显示,界面参数设置是自定义控件实现,需要的朋友可以下载来看看,文章链接效果https://blog.csdn.net/ZuoYueXian/article/details/146396706?spm=1001.2014.3001.5501

(64页PPT)智能工厂实施建设方案.pptx

(64页PPT)智能工厂实施建设方案.pptx

上一篇: 二、Usb mass_storage turn on 的过程
下一篇: 四、android下的光盘功能控制
yada____
博客等级 码龄14年 8粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值