Android App 学习笔记

Android Studio

  1. gradle设置为本地版本:
    需要配置:File -> Settings
    在这里插入图片描述
    设置gradle-wrapper.properties:
    在这里插入图片描述
  2. layout目录下创建子目录(目前仅在Project模式下才能显示):
    参考文章:【Android Studio安装部署系列】十六、Android studio在layout目录下新建子目录
    注:
    ※ 当前只有在project模式下才会展示出来,并且要把hide的选项去掉,不勾选(AS版本3.2)在这里插入图片描述
  3. 安卓studio预览界面显示为全面屏:
    在这里插入图片描述

四大组件

安卓四大组件:活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)、内容提供器(Content Provider)

服务

  • 服务中的代码默认运行在主线程当中
  • 每个服务只会存在一个实例:因此只能bind一次(多次bind属于无效操作,不会重复回调onBind接口,不会报错。如果服务还没创建则会自动先创建服务),unbind接口一旦销毁服务,不能多次调用,会出现程序异常退出。startService可以多次调用,会多次回调onStartCommand回调,如果还没创建,会先自动创建服务,回调onCreate。在服务销毁后,再次调用stopService不会造成异常发生。
  • 使用上应该保持startService和stopService一一对应,bind和unbind一一对应。bind启动服务,与调用者关联。如果是采用startService则启动后,与调用者无关
    Android 服务两种启动方式的区别

Activity(活动)

活动的四种状态:

  • 运行状态:位于任务栈顶;
  • 暂停状态:不在栈顶,但仍然可见;
  • 停止状态:不在栈顶,完全不可见;
  • 销毁状态:从任务栈中移出,上述的三种状态仍是处于任务栈中。系统往往更倾向回收该状态的活动,从栈中移出,并不代表被系统回收了。

活动的生命周期
在这里插入图片描述

活动的启动模式

  • standard: 默认模式, 每次启动活动都会创建一个新的实例,入栈,占据栈顶位置
    在这里插入图片描述
  • singleTop:在启动活动时,发现该活动已处于栈顶位置,则沿用当前活动,不会创建新的实例
    在这里插入图片描述
  • singleTask:先检查栈中是否有该活动的实例,如果有,则直接使用该实例,并把这个活动之上的所有活动都出栈,无则创建新的实例
    在这里插入图片描述
  • singleInstance:不同于上述3中启动模式,指定为singleInstanch模式的活动会启用一个新的返回栈来管理这个活动在这里插入图片描述

布局

  1. android:textSize=“24sp” =>
    单位:
    px: 表明像素pixel
    sp: Scale-independent Pixel(抽象像素)
    dp: Density Independent Pixel(密度无关像素)

  2. button控件
    对应的Text文档:
    在这里插入图片描述

  3. 设置控件水平居中
    在这里插入图片描述

更新UI

  1. runOnUiThread直接刷新UI
    public class MainActivity extends Activity
    {
        private static final String TAG = MainActivity.class.getSimpleName();
        private static final int REFRESH_ACTION = 1;
        private Button mButton;
        private TextView mTextView;
        private int mCount = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mTextView = (TextView) findViewById(R.id.textView1);
            mButton = (Button) findViewById(R.id.button1);
            mButton.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View arg0)
                {
                    // TODO Auto-generated method stub
                    new Thread() //worker thread
                    {
                        @Override
                        public void run()
                        {
                            while ((mCount < 100))
                            {
                                MainActivity.this.runOnUiThread(new Runnable() // 工作线程刷新UI
                                { //这部分代码将在UI线程执行,实际上是runOnUiThread post Runnable到UI线程执行了
                                @Override
                                public void run()
                                {
                                       mCount++;
                                       mTextView.setText("I'm updated:"+ mCount);
                                       Log.i(TAG, "Count:" + mCount);
                                }
                                });
                                try
                                {
                                    Thread.sleep(1000);
                                }
                                catch (InterruptedException e)
                                {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                        }
                    }.start();
    
                }
            });
        }
    }
    

res目录

  • 以drawable开头的都是放图片的;
  • 以mipmap开头的都是放应用图标的;
  • 以value开头的都是放字符串、样式、颜色配置的;
  • layout文件夹是用来放布局文件的。

Jave 语法

final关键字

  • final类不能被继承,没有子类,final类中的方法默认是final的
  • final方法不能被子类的方法复盖,但可以被继承
  • final成员变量表示常量,只能被赋值一次,赋值后不能再被改变
  • final不能用于修饰构造方法
  • private不能被子类方法覆盖,private类型的方法默认是final类型的

final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
注意:final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。

native关键字

native 关键字告诉编译器(其实是JVM)调用的是该方法在外部定义

synchronized关键字

Synchronized是Java并发编程中最常用的用于保证线程安全的方式,类似C++的中的互斥量(mutex)和锁(lock)的组合

实现多线程

  1. 通过继承Thread类实现多线程
    package test;
    public class example {
    public static void main(String[] args){
    	MyThread myThread=new MyThread();
    	myThread.start();
    	while(true)
    	{
    	 	System.out.println("Main方法在运行");
    	 }
    }
    }
    
    class MyThread extends Thread{
    	public void run(){
    		while(true){
    			System.out.println("MyThread类的run()方法在运行");
    		}
    	}
    }
    
  2. 实现Runnable接口创建多线程
    package test;
    public class example {
    public static void main(String[] args){
    	MyThread myThread=new MyThread();
    	Thread thread=new Thread(myThread);
    	thread.start();
    	while(true)
    	{
    		System.out.println("Main方法在运行");
    	}
      }
    }
    
    class MyThread implements Runnable{
    	public void run(){
    		while(true){
    			System.out.println("MyThread类的run()方法在运行");
    		}
    	}
    }
    
  3. 采用闭包的方式
new Thread() {
            @Override
            public void run() {
				System.out.println("in thread");
            }
        }.start();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值