Android 数据通信:从基本的Activity、Fragment、Service数据传递到EventBus的使用

in 垃圾文章 | No Comments »

本文主要内容:首先介绍 Android 自带的 Activity 互相传递数据、Activity 与 Fragment 互相传递数据、Activity 与 Service 互相传递数据。随后分析它们的使用场景与优缺点,引出 EventBus,最后介绍 EventBus 的基本使用。
注:本文 Demo 皆为 kotlin 编写,有 Java 基础的读者应该能大致理解,请放心阅读。
注2:本文属于垃圾文章补完计划

Android 自带的数据通信机制

Activity 与 Activity 互相传递数据

我们将从 AActivity 启动 BActivity,并通过 intent 传送数据。
AActivity 的 onCreate 方法内:

            into_b.setOnClickListener {
            val intent = Intent(baseContext, BActivity::class.java)
            //传递基本类型
            intent.putExtra("att1", "普通的字符串")
            //传递序列化对象
            val person = Person("xloger", 18)
            intent.putExtra("att2", person)

            startActivity(intent)
        }

BActivity 的 onCreate 方法内:

        val sendMsg = intent.getStringExtra("att1")
        val person = intent.getSerializableExtra("att2") as? Person
        Log.d("XExample", "收到的消息:$sendMsg,收到的对象:$person")

输出结果:

D/XExample: 收到的消息:普通的字符串,收到的对象:Person(name=xloger, age=18)

注意,虽然 intent 看似有传 extra 和传 bundle 两种方式,但是 extra 只是 bundle 的封装。需要传递对象时需该类实现 Serializable 接口。
而当需要接收 BActivity 的返回数据时,需将原先的startActivity(intent)改为startActivityForResult(intent,233),其中整型233为 requestCode,作用是区分不同请求。
而 BActivity 在销毁前通过以下代码即可传递数据给 AActivity:

        val resultIntent = Intent()
        resultIntent.putExtra("resultMsg", "返回的内容")
        setResult(124, resultIntent)

然后在 AActivity 类中实现以下方法:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == 233 && resultCode == 124) {
            Log.d("XExample", "返回的内容为:${data?.getStringExtra("resultMsg")}")
        }
    }

当进入 BActivity 后返回 AActivity,输出结果:

D/XExample: 返回的内容为:返回的内容

注意,requsetCode 与 resultCode 目的是为了区分不同的请求。而实际开发中,这些数应该统一放入常量池中,防止数据过多时不好区分。

(更多…)

垃圾文章补完计划

in 垃圾文章 | 2 Comments »

我对我技术类文章要求还是比较严格的,我个人觉得某个问题是我在努力通过搜索引擎并没有轻易地解决,当我经历了一些波折才解决,把这样的经历写下来才是比较有价值的文章。那些一搜一大把还都是复制来复制去的“技术文章”我真的很抵触。

但是呢,在最近面试时经历了一些事,看来我被某个喜欢“写废话”的竞争者打败了=。= 因此我便自暴自弃知耻后勇地决定把一些我觉得对整个互联网并没价值的个人经验写出来了。(因为对应的知识已经有很多文章写的比我好了)

因此我把它自嘲为“垃圾文章补完计划”,虽然说是垃圾,但是并不代表质量低劣(也许呢…),文章我都是认真写的,也尽可能写的比较完善。假如身为读者的你恰好看到了,不妨读读看吧。

以及,高中毕业后便感觉我的精准表达能力在不断下降,很多内容我已经没法用书面语准确简练讲清楚了,直到某次我看到一篇阐述网络词汇广泛流行的弊端有哪些?的文章才惊醒。因此多写文章还有一个目的就是锻炼精准表达能力吧。

就像张佳玮说的,当某天我看到一个很美的景色时,我脑海里能浮现的是“落霞与孤鹜齐飞,秋水共长天一色”这样的句子,还是只能一句“卧槽,真好看”。——让孩子背诵古诗词、古文有什么意义?

“Console window host” CPU 占用异常情况排查

in 在路上 | No Comments »

我的电脑时不时(触发条件未知)会突然响起风扇散热的声音,检查任务管理器会发现一个“Console window host”的进程 CPU 占用居高不下,通过了“’console window host’ high cpu”关键字谷歌搜寻后,基本没有中文资料,MicroSoft 官网的解答基本无用,最后通过https://www.howtogeek.com/howto/4996/what-is-conhost.exe-and-why-is-it-running/ 解决。在此分享步骤以供后人参考。

(更多…)

ViewPager 的点击监听与存在的误触问题

in 在路上 | No Comments »

ViewPager 是不自带 onItemClickListener 之类的方法的,解决方案也很简单,就是在 PagerAdapter 的 instantiateItem 方法里为每个页面加上监听。这是业界通常的做法,但是为毛没一个人提到这样会产生误触问题呢Orz……虽然解决误触也不复杂啦,但是我还是纳闷为啥我之前搜都没有相关资料呢……所以我还是写下这篇帮助下会被此困扰的人吧。

ViewPager 的点击事件监听

public class StartViewPagerAdapter extends PagerAdapter {
    private List mListViews;
    private View.OnClickListener clickListener;

    public StartViewPagerAdapter(List mListViews,View.OnClickListener clickListener) {
        this.mListViews = mListViews;
        this.clickListener=clickListener;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {  
        container.addView(mListViews.get(position), 0);
        mListViews.get(position).setOnClickListener(clickListener);
        //TODO 后面解决误触的代码
        return mListViews.get(position);
    }
}

然后创建的时候把 clickListener 传进来就行,没啥好说的。
(更多…)

从设计角度探讨炉石传说中的“尤格萨隆”的价值与合理性

in 新世界 | 1 Comment »

首先声明,该帖并不是站队,我对傻龙的感情很复杂,所以我想借这个贴理清一下思路,同时也希望对真正想讨论这件事而不是只想喷了一通自己开心就好的玩家有帮助。

(ps:Markdown好像在我的主题上显示有点不好,各位凑合看吧)

想对尤格萨隆这张卡做出一个合理的判断,仅仅评判它是没用的,要结合整个炉石体系。首先我们分析一下网上普遍黑各卡组的评价:
– T7猎、机械法、打脸萨、海盗战、魔能德:啥都不用管只要一直干脸就好。比较流行的就是那张T7猎遮住对面随从只看英雄血量的图。
– 中速猎、佛祖骑、龙战、龙牧:按费拍怪,无脑卡组(龙牧当时在黑石山之后火了一两星期)。引用王师傅的一句话就是“对面打的好菜啊各种伏笔,可是我就是干不过它。”
– 冰法、奇迹贼、奴隶战(未削弱前):自闭卡组,就是你打你的,我攒齐了combo就带走你,导致对方体验太差。
– 咆哮德、死鱼骑(带老瞎眼):一切中后期卡组的克星,限制了卡组往后期发展。
– 克战、防战、奶骑:一个休闲游戏憋尿有意思么。
– 脏牧、爆牌贼、缺德:游戏体验差,被恶心。
– 火妖法、环牧:一般是某些单卡比如秘法宝典、埋葬被黑。
– 复活牧、动物园:被黑的言论我忘了…
– 尤格萨隆系列卡组:无论我前期多大的优势,被对面一个傻龙可能就没了。清场、回血、过牌,垃圾游戏,全靠运气。
这大概是各卡组火的时候都有过的针对言论,可能有纰漏,诸位脑补剩余的就行。

看完上面的各种卡组被日常,诸位应该能体会我“脱离炉石的体系单独讨论尤格萨隆这张卡没意义”这个核心观点了吧。也许还应该再拿些单卡比如大范、477、大螺丝、死亡之翼、伊瑟拉、砰砰博士之类的进行对比,不过我觉得讨论之前得先把一些分歧点确定,就是这些观点你不认同可以,但是请明白我们讨论这个问题之前可能因为这些分歧才导致不同的结论。
首先先定义毒瘤卡组:操作难度低、卡组强大、使用人数多的卡组。
操作难度低体现在,我不觉得奴隶战(削弱前)是毒瘤卡组,尽管它强大但是新手很难迅速掌握,同时每回合抉择很多。大王术、环牧同理,每回合能有几种不同的选择,而且还需要考虑后几回合如何发展,新手与老手水平差距很大。而T7猎、打脸萨这种,请注意定义是操作难度低而不是没有,这些卡组固然有一定的思考选择,但是新手与老手之间的水平差距对比赛结果影响并不大,简而言之就是容错率高。
以及,毒瘤卡组并不意味着只要被冠上这个名字就低人一等。在我看来毒瘤卡组只是一种称呼,你要不喜欢改叫流行卡组也可以。
再定义不能友好讨论的玩家,比如就傻龙合不合理这件事,其实正反方里都有一群人,他们就是不爽另一方就是想喷对面,同时还持有各种不能推敲的论点。我觉得当正反方想真正讨论一个问题时就应该放弃与这类人争论与花精力反驳他们的观点。这类人常常持有我打不过的卡组都是毒瘤(他们自己不愿承认但客观事实就是如此)、太长不看(不看那你就别瞎BB)这样的观点。

(更多…)

© 2018 一隅 - Powered by Wordpress / Theme: Tabinikki