清霜辰-博客

安卓应用开发之十万个为什么

[TOC]

转载自 https://github.com/getActivity/AndroidProject/blob/master/HelpDoc.md
以下内容基于项目 https://github.com/getActivity/AndroidProject

为什么没有用 MVP



为什么没有用 ButterKnife

Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them as annotation
Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements

为什么没有用 ViewBinding

ActivityXxxxBinding.inflate binding = ActivityXxxxBinding.inflate(getLayoutInflater());
binding.tv_data_name.setText("字符串");

为什么没有用 DataBinding

ActivityXxxxBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_xxxx);

为什么没有用组件化

为什么没有集成界面侧滑功能

为什么没有用今日头条的适配方案

ldpi:1dp=0.75px

mdpi:1dp=1px

hdpi:1dp=1.5px
 
xhdpi:1dp=2px

xxhdpi:1dp=3px

xxxhdpi:1dp=4px

字体大小为什么不用 dp 而用 sp

为什么没有用 DialogFragment 来防止内存泄漏

为什么没有用腾讯 X5 WebView

为什么没有用单 Activity 多 Fragment

为什么没有用 ConstraintLayout 来写布局

为什么不拆成多个框架来做这件事

为什么最低兼容到 Android 5

为什么不加入扫描二维码功能

为什么不加入 EventBus

为什么没有用 Retrofit 和 RxJava

为什么没有用 Jetpack 全家桶

为什么不对图片加载框架进行再次封装

模板 架构 技术中台有什么区别

为什么不按业务来划分包名

为什么没有关于列表多 type 的封装

这不就是一个模板工程换成我也能写一个

假设 AndroidProject 更新了该怎么升级它

为什么不用谷歌 ActivityResultContracts

public abstract class BaseActivity extends AppCompatActivity {

    /** Activity 回调集合 */
    private SparseArray<OnActivityCallback> mActivityCallbacks;

    /**
     * startActivityForResult 方法优化
     */

    public void startActivityForResult(Class<? extends Activity> clazz, OnActivityCallback callback) {
        startActivityForResult(new Intent(this, clazz), null, callback);
    }

    public void startActivityForResult(Intent intent, OnActivityCallback callback) {
        startActivityForResult(intent, null, callback);
    }

    public void startActivityForResult(Intent intent, @Nullable Bundle options, OnActivityCallback callback) {
        if (mActivityCallbacks == null) {
            mActivityCallbacks = new SparseArray<>(1);
        }
        // 请求码必须在 2 的 16 次方以内
        int requestCode = new Random().nextInt((int) Math.pow(2, 16));
        mActivityCallbacks.put(requestCode, callback);
        startActivityForResult(intent, requestCode, options);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        OnActivityCallback callback;
        if (mActivityCallbacks != null && (callback = mActivityCallbacks.get(requestCode)) != null) {
            callback.onActivityResult(resultCode, data);
            mActivityCallbacks.remove(requestCode);
            return;
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

    public interface OnActivityCallback {

        /**
         * 结果回调
         *
         * @param resultCode        结果码
         * @param data              数据
         */
        void onActivityResult(int resultCode, @Nullable Intent data);
    }
}
// Google 的用法
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
    @Override
    public void onActivityResult(ActivityResult result) {
        Intent data = result.getData();
        int resultCode = result.getResultCode();
    }
}).launch(new Intent(this, HomeActivity.class));

// AndroidProject 的用法
startActivityForResult(HomeActivity.class, new OnActivityCallback() {
    @Override
    public void onActivityResult(int resultCode, @Nullable Intent data) {
        
    }
});

轮子哥你怎么看待层出不穷的新技术

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »