转载请注明出处王亟亟的大牛之路
这周都在捯饬RN和搭建公司内部的开发环境,没怎么好好学习,正好看到之前收入的一个中文转拼音的库,体验了下推荐给大家,先安利:https://github.com/ddwhan0123/Useful-Open-Source-Android
从这篇开始,之后的每篇都会提几个面试题,温顾下知识(见文章尾,妹子前面的“面试题”部分)
首先,为什么推荐给大家这个库而不是广泛使用的jpinyin,理由有以下几个
生成的拼音不包含声调,也不处理多音字,默认一个汉字对应一个拼音;
无需初始化,执行效率很高(Pinyin4J的4倍);
很低的内存占用(小于30KB)。
How to use?
buildscript {
repositories {
jcenter()
}
dependencies {
compile 'com.github.promeg:tinypinyin:1.0.0'
}
}
它类似于一个工具类,方法都是静态的,不用初始化,我们来看下作者提供的2个方法
public static String toPinyin(char c)//中文转拼音,如果不是中文就 return String.valueOf(c);
public static boolean isChinese(char c) //用于判断是否是中文
运行效果
来简单地看看实际使用的代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView resultTV;
private EditText inputET;
private Button submitBtn;
private String pinYin = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.submitBtn:
pinYin = inputET.getText().toString().trim();
if (!pinYin.isEmpty()) {
resultTV.setText(Pinyin.toPinyin(pinYin.charAt()));
}
inputET.setText("");
break;
default:
break;
}
}
private void init() {
resultTV = (TextView) findViewById(R.id.resultTV);
inputET = (EditText) findViewById(R.id.inputET);
submitBtn = (Button) findViewById(R.id.submitBtn);
if (submitBtn != null) {
submitBtn.setOnClickListener(this);
}
}
一个按钮,一个输入栏,一个展示View,把简单的逻辑实现了下,其实主要的代码就一行:
Pinyin.toPinyin(pinYin.charAt(0))
既然使用简便,博文篇幅也不长,那就来看看这个类最重要的方法是toPinyin如何实现的吧(解释都在注释里)
public static String toPinyin(char c) {
//判断是否中文
if (isChinese(c)) {
//判断Unicode编码
if (c == PinyinData.CHAR_12295) {
return PinyinData.PINYIN_12295;
} else {
return PinyinData.PINYIN_TABLE[getPinyinCode(c)];
}
} else {
return String.valueOf(c);
}
}
先判断Unicode是否汉子,如果是的话看是否等于“〇”(其实这个字我不认识。。。。查了查是 Ling),如果不是就去“词典”里取读音。
词典里大概是
"", "A", "AI", "AN", "ANG", "AO", "BA", "BAI"
长得像这样的一对、堆读音,就不详细举例子了。
作者没有做读音或者声调的判断,如果需要可以看https://github.com/stuxuhai/jpinyin
总结:这是一个使用简单,性能上佳,实现方便的“工具类”,在搜索/通讯录等模块都会用得到,收录下来以便不时之需哦!
面试题 1 service是否可以打开属于Activity的dialog?
**答:**service中弹出dialog时,如果写和activity同样的代码时会报错.
那么如何解决这个问题呢?
首先,需要授权
android.permission.SYSTEM_ALERT_WINDOW
然后
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
可参考文章 http://www.cnblogs.com/shaweng/p/3990748.html
面试题2 杀死进程广播还在吗
广播还在的,广播信息在安装应用后,是注册到系统的服务中的,所以不管应用进程在不在,广播都是会被吊起来的。(相关关键词,动态广播/静态广播)
例子地址:https://github.com/ddwhan0123/BlogSample/tree/master/PinYinDemo
上面那部分是最近想到添加的,如果大家有什么疑问可以给我留言或者微信告知我(活人,不是公众号)