美文网首页
Android:APP实践:起点 -2020-06-12

Android:APP实践:起点 -2020-06-12

作者: 勇往直前888 | 来源:发表于2020-06-17 18:28 被阅读0次

    创建工程

    这个过程主要是定义包名,应用名字等等。

    • 菜单命令:New -> New Project... Project是很重要的一个概念,可以简单地认为,一个应用可以用一个Project来代替,就算有各终端,比如“学生端”,“老师端”,“iPad版”,“手机版”... ...

    • 选择模板,一般选择Empty Activity

    企业微信截图_b1fcf263-b493-4a29-a75d-890eec6693d9.png
    • 配置工程, Config Project。这一页其实不叫重要,想应用名字,包id之类
    企业微信截图_e3a130e2-91b8-4127-a8d9-ef00150a82cf.png
    • 工程是可以直接运行的,当然页面是空白的,只有一个字符“Hello World”
    企业微信截图_2fa4dbd5-7570-4a75-b226-5345c6b809ef.png

    程序入口

    • MultiDexApplication为基类,需要在build.gradle文件中导入这个包
    企业微信截图_34814c78-720a-427e-a1bf-233faf219ace.png
    • 创建自定义的类,这里命名为CashierApplication
    企业微信截图_abf79706-e6b8-408f-bbe5-9c371c95ba4b.png
    • AndroidManifest.xml中注册。
    企业微信截图_f9550d90-5e13-4b33-a09d-a3d984f6b639.png
    • 在这里,可以做一些程序启动,首页展示之前的一些工作,比如第三方库初始化,获取应用实例,获取主线程Handler等工作。
    package com.kjtpay.app;
    
    import android.app.Application;
    import android.os.Looper;
    import androidx.multidex.MultiDexApplication;
    import android.os.Handler;
    
    /**
     * 程序入口
     */
    public class CashierApplication extends MultiDexApplication {
    
        private static Application mInstance;
        private static Handler mHandler;
    
        public static Application getApplication() {
            return mInstance;
        }
    
        public static Handler getHandler() {
            if (null == mHandler) {
                synchronized (Handler.class) {
                    mHandler = new Handler(Looper.getMainLooper());
                }
            }
            return mHandler;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            // 保存实例
            mInstance = this;
    
            // 第三方初始化
            sdkInitial();
    
            // 初始化接口
            initial();
        }
    
        // 初始化三方库
        private void sdkInitial() {
            
        }
            
        // 初始化接口
        private void initial() {
            
        }
    }
    

    基类Activity

    • Android里的文件夹都是包,类都放在某个包里。所以文件夹的名字习惯用小写。这里新建一个名字叫base的包。菜单:File -> New -> Package;在弹出的包名里面接上base。成为com.kjtpay.app.base
    企业微信截图_b206e651-b335-4e5d-a037-6da02c4e55cb.png
    • 有一些公共的内容,写在基类里面,会方便很多。

    • 这个是属于Activity的,所以采用菜单File -> New -> Activity -> Empty Activity比较方便。

    企业微信截图_bf8cd38a-d497-4bcb-812c-80c14ead45d4.png
    • 一开始可以什么也没有,等有公共的需求时,再放入,比如日志,友盟统计等。

    • 由于基类不能直接使用,所以添加abstract关键字,并且从注册文件AndroidManifest.xml中删除注册信息

    企业微信截图_726aa0f0-6967-47fa-ac9e-0c135b626c1e.png
    package com.kjtpay.app.base;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    
    /***
     *  activity 基类
     * */
    public abstract class BaseActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    
        public boolean isLiving() {
            return (!isDestroyed() && !isFinishing());
        }
    }
    

    什么也没做,留着以后慢慢加内容

    广告页

    在展示首页之前,往往有些活动介绍,或者说是广告。所以,第一个展示的页面,往往不是首页,而是一般被称为splash的广告页。

    • 菜单仍然是File -> New -> Activity -> Empty Activity
    企业微信截图_ae3d62f8-d508-466e-a16e-d25f9fb5d183.png
    • 点击Finish之后,展示新增的文件,询问是否加入git,一般都加的,保持默认就好。
    企业微信截图_30856327-1002-4ad3-9641-b61fa1b1cbde.png
    • 设为启动页。默认的启动页已经删除,这里要重新设置一个。
    企业微信截图_5547d8c6-d698-4e59-950a-0bb988945e73.png
    • 运行一下,跟默认的有点不一样了,至少字符串“Hello World”不见了。
    企业微信截图_a8d1aa48-a3ae-4af6-abe8-a023406698b8.png

    对于android.intent.action.MAIN和android.intent.category.LAUNCHER的理解

    首页

    默认生成的MainActivity只有一个Hello World字符串,大多数情况下并不符合需求。所以一般会删除,重新生成一个。

    • 和上面的一样,生成一个新的,名字叫HomeActivity的页面,作为首页。

    • 这样生成的Activity,在AndroidManifest.xml中会自动注册

    企业微信截图_8560ffeb-e786-4c83-9f47-4ae6a6bac2df.png
    • 虽然名字叫“首页”,但是应用第一启动页面并不是它,所以,没有必要添加代表默认启动的语句:
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    
    • 闪屏页目前是空白的,等以后有广告需求再添加内容。现在要从闪屏页跳转到首页,跳转代码放在哪里呢?
      理论上放哪都行,不过,这里还是放在首页当中,并且做成静态函数的方式,方便调用。理由很简单,从闪屏页去哪里不知道,但是作为首页,想跳过来,最低要求,只要对方给Context就可以了。这样做的好处,就是跳转代码可以集中在一个地方。
    public class HomeActivity extends BaseActivity {
    
        private static final String SOURCE_NAME = "source_name";
    
        /***
         *  跳转到首页,并指明来源名字
         * */
        public static void launch(Context context, String sourceName) {
            if (null != context) {
                Intent intent = new Intent();
                intent.setClass(context, HomeActivity.class);
                intent.putExtra(SOURCE_NAME, sourceName);
                if (!(context instanceof Activity)) {
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                }
                context.startActivity(intent);
            }
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
    
            // 展示来源名字
            Intent intent = getIntent();
            String  sourceName = intent.getStringExtra(SOURCE_NAME);
            Toast.makeText(HomeActivity.this, "从页面"+sourceName+"跳转过来", Toast.LENGTH_LONG).show();
        }
    }
    
    public class SplashActivity extends BaseActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_splash);
    
            // 跳转到首页
            HomeActivity.launch(SplashActivity.this, "闪屏广告页");
        }
    }
    
    企业微信截图_97bb20b4-cc05-47ba-a4fc-102c244754ac.png

    相关文章

      网友评论

          本文标题:Android:APP实践:起点 -2020-06-12

          本文链接:https://www.haomeiwen.com/subject/hnjgtktx.html