• Android笔记


    1.活动的声明周期:
        OnCreate -> OnStart -> OnResume -> OnStop -> OnDestroy
                                              -> OnRestart -> OnStart
                                   
    2.活动之间传递值:
        Bundle    传递简单的值,比如字符串之类的
            OnSaveInstanceState            活动被销毁之前触发
                                        所有设置了ID属性的控件默认都将会保存信息
                                        home、back不会触发该事件
            OnRestoreInstanceState        OnCreate之后触发
        自定义对象
            OnRetainNonConfigurationInstance
            LastNonConfigurationInstance
        * 屏幕方向切换后,当前活动将重新创建一个新的实例(也就是说旧实例的实例属性都被清掉了,只有静态属性会被保留下来)
       
    3.三个设置版本:
        Target Framework            目标版本,也就是采用这个版本去编译
        Minimum Android Version        最低允许运行版本
        Target Android Version        期待的运行版本,一般也就是Target Framework
       
    4.在指定版本上运行某些功能:
        if(Android.OS.Build.Version.SdkInt >= Android.OS.BuildVersionCodes.Lollipop)
            builder.SetCategory(Notification.CategoryEmail);
           
    5.Android libray的版本设置:
        引用库:应用的编译版本应该 >= 引用库的编译版本
        创建库:库的编译版本应该 = 应用的最低版本
       
    6.处理横竖屏的两种方式:
        自动,使用不同的layout:
            layout目录下面建立一个layout-land的目录,表明里面放置的是屏幕横立时的layout
            * drawable与此相同
        手动,检测当前方向:
            WindowManager.DefaultDisplay.Rotation
            竖向:SurfaceOrientation.Rotation0 或者 SurfaceOrientation.Rotation180
            横向:90,270
            为控件设置不同的RelativeLayout.LayoutParams

    7.阻止横竖屏导致的重新开始,重复的OnCreate:
            活动上添加以下属性:
                ConfigurationChanges=Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize
            重载 OnConfigurationChanged 方法:
                OnConfigurationChanged(Android.Content.Res.Configuration newConfig){
                     base.OnConfigurationChanged (newConfig);
                     if(newConfig.Orientation == Android.Content.Res.Orientation.Portrait){}
                }
       
    8.描画
        Drawable Resources
            放置在Resources/drawable文件夹下
            ShapeDrawable、StateListDrawable、LayerDrawable、TransitionDrawable、LevelListDrawable、ScaleDrawable/ClipDrawable、InsetDrawable、BitmapDrawable
        Canvas
       
    9.动画
        View Animations
            根节点:alpha、rotate、scale、translate、set
            动画类型:AcclerateInterpolator/DecelerateInterpolator-加速/减速 BounceInterpolator-最后弹起 LinearInterpolator-恒定速度
        Property Animations
            ValueAnimator、ObjectAnimator、AnimationSet
            ValueAnimator.OfInt、ValueAnimator.OfFloat、ValueAnimator.OfObject
        Drawable Animations
            多个画面之间进行顺序切换,类似于幻灯片,放置于/Resource/drawable 目录下
           
    10.安卓资源
        有以下资源目录:
            animator
            anim
            color
            drawable
            layout
            menu
            raw
            values
            xml
           
    11.手机的屏幕尺寸原来指的是对角线。。。
        ppi:每英寸像素数 - Pixel per inch, 设备的点密度
        dpi:每英寸多少点 - dot per inch, 印刷品点密度
            dpi=(√(横向分辨率^2+纵向分辨率^2))/屏幕尺寸
        dip/dp:设备独立像素 - Density-independent pixel
            dp = pixels/(dpi/160)
            *指定物理宽度能显示的像素数量
            *抽象意义上的像素,安卓上假定的默认显示设备是160dpi
            *这个公式计算出的像素,最后在各分辨率的屏幕上宽度都一样
            *密度越高,能显示的像素就越多,占用的物理宽度就越少
            * 即同一图片在低密度屏上显得很大,而在高密度屏上很小
           
    12.布局
                                                ldpi    mdpi    hdpi
        Launcher、menu                            36*36    48*48    72*72
        tab、Dialog、ListView、StatusBar        24*24    32*32    48*48
        API Level 13(Android 3.2)以上推荐使用dp来使用不同的布局:
            例如:layout-sw700dp
            典型的手机        320dp
            5寸平板/手机    480dp    三星note
            7寸平板            600dp
            10寸平板        720dp
        13以下使用small/normal/large/xlarge来区分,对应关系:
            small    426*320
            normal    470*320
            large    640*480
            xlarge    960*720
            * 单位为dp
        布局基准:
            只为需要的屏幕进行设计
            使用dp而不是pixel
            避免使用AbsoluteLayout,使用LinearLayout,RelativeLayout与GridLayout
            选择一个默认方向
            使用Layout参数
                wrapcontent, fillparent, 样式使用dp参数
               
    13.区域化参数
        values文件夹名区分
        values、values-de、values-es
        * 区域化比较耗时,所以很多程序都不提供
        * 3个基准:layouts越少越好,默认区域要测试完整(程序连默认的资源都找不到时会崩溃),只做需要的区域化   
           
    14.Assets 用来读取未经过加工的数据
            string content;
            using (StreamReader sr = new StreamReader (Assets.Open ("read_asset.txt")))
            {
                content = sr.ReadToEnd ();
            }
        Resources下面归属于资源系统管理
       
    15.服务-Started Services、Bound Services
        Started Services分为3类:
        自己内部用的并可以并发同时访问的、外部程序可调用的、队列顺序执行的
        前两个运行在主线程中,做耗时操作时仍需自己再开线程
        后者运行在新开的线程中,无需自己手动再开线程
        * 后者继承自IntentService,并且需事先父类带string的构造函数:
        * public MyIntentService:base("MyIntentService"){}
        OnCreate
        OnStartCommand
            返回StartCommandResult枚举值,Sticky使用空Intent重启,RedeliverIntent 使用最后的Intent重启
        OnDestroy
        * OnBind 返回IBinder(Bound Service需要)
        * 类以Service属性修饰
        * 需要在AndroidManifest.xml中声明:<service android:name="demoservice.DemoService"></service>
       
        开启与关闭服务:
        StartService、StopService(Context中)
        StopSelf、StopSelfResult(Service中)
       
        其他应用可启动的服务:
        * 需要用IntentFilter在类上修饰属性,同时需要在AndroidManifest.xml中声明
        开启:StartService (new Intent ("com.xamarin.DemoService"));
        关闭:StopService (new Intent ("com.xamarin.DemoService"));

    16.    发送一条顶部通知:
            var nMgr = (NotificationManager)GetSystemService (NotificationService);
           
            var notification = new Notification (Resource.Drawable.Icon, "Message from demo service");
            var pendingIntent = PendingIntent.GetActivity (this, 0, new Intent (this, typeof(DemoActivity)), 0);
            notification.SetLatestEventInfo (this, "Demo Service Notification", "Message from demo service", pendingIntent);
           
            nMgr.Notify (0, notification);
        发送一条顶部不消失的通知:
            StartForeground(Service中的方法)
            StopForeground
        发送一条一闪而逝提醒通知:
            Toast.MakeText (this, "The demo service has started", ToastLength.Long).Show();
        service中需要使用Handler:
            var myHandler = new Handler ();
            myHandler.Post(() => {
                Toast.MakeText (this, "Message from demo service", ToastLength.Long).Show();
            });
        * 还有其他两种跟UI交互的方式:
            Android.App.Application.SynchronizationContext.Post()
            System.Threading.SynchronizationContext.Current.Post()
           
    17.多媒体
        音频
        播放    MediaPlayer
        录音    MediaRecorder
        通知
        底层版    AudioTrack(播放)、AudioRecord(录音)
           
    18.后台运行       
        StartedService
        BoundService
        HybridService
            本地:
            StartService();
            BroadcastReceiver
            远程:
            Messenger
            AIDL(支持多线程)
           
    19.Fragments有3个子类:
        ListFragment
        DialogFragment
        PreferenceFragment
        * 安卓3.0以下,兼容包对前两个做了支持,最后一个没有做支持
       
    20.列表的使用
        调用安卓的方法时,需要使用Android.Runtime下面的类型,这样再初始化后再改变,在托管代码中才可见
            var badSource  = new List<int> { 1, 2, 3 };
            var badAdapter = new ArrayAdapter<int>(context, textViewResourceId, badSource);
            badAdapter.Add (4);
            if (badSource.Count != 4) // true

  • 相关阅读:
    ACM的算法分类 2015-04-16 14:25 22人阅读 评论(0) 收藏
    初学Larevel 2014-08-21 11:24 90人阅读 评论(0) 收藏
    初学PHP&MySQL 2014-05-31 12:40 92人阅读 评论(0) 收藏
    codeforces 570 E. Pig and Palindromes (dp)
    codeforces 570 D. Tree Requests (dfs序)
    poj 2157 Maze (bfs)
    cf 570 C. Replacement (暴力)
    cf 570B B. Simple Game(构造)
    cf 570 A. Elections
    hdu 1429胜利大逃亡(续) (bfs+状态压缩)
  • 原文地址:https://www.cnblogs.com/thyong/p/5274647.html
Copyright © 2020-2023  润新知