常用知识点及常见问题

2016-08-19  本文已影响60人  浅吟且行的时光
1.使用sharedPreferences保存数据
private void putShareData() {    
SharedPreferences sharedPreferences = getSharedPreferences("phoneNum", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("devicePhone", AppInfo.phoneNumber);
editor.putString("localPhone", localPhone);    
editor.commit();
}
private void getSharedData() {    
SharedPreferences sharePreference = getSharedPreferences("phoneNum", MODE_PRIVATE);    //可以使用PreferenceManager.getDefaultSharedPreferences获取实例
AppInfo.phoneNumber = sharePreference.getString("devicePhone", "");    localPhone = sharePreference.getString("localPhone", "");
}
2.Android视频
3.自定义view
4.android:textAppearance

设置文字外观。如 “?android:attr/textAppearanceLargeInverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可设置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse

5.制造延迟效果
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mMainPresenter.loadData();
}
}, 2000);
6.android 状态栏颜色

windowBackground设为白色,colorPrimaryDark设为透明时,个别机型会出现状态栏白色,状态栏的字体颜色也默认是白色,所以造成无法分辨和查看!
解决办法:colorPrimaryDark设为不透明,在布局中设置背景颜色控制状态栏颜色

7.Java获取时间格式
public static String getCurrentTime(String pattern){
        SimpleDateFormat sdf=new SimpleDateFormat(pattern);
        return sdf.format(new Date());
    }
/**
 *                          HH:mm    15:44
 *                         h:mm a    3:44 下午
 *                        HH:mm z    15:44 CST
 *                        HH:mm Z    15:44 +0800
 *                     HH:mm zzzz    15:44 中国标准时间
 *                       HH:mm:ss    15:44:40
 *                     yyyy-MM-dd    2016-08-12
 *               yyyy-MM-dd HH:mm    2016-08-12 15:44
 *            yyyy-MM-dd HH:mm:ss    2016-08-12 15:44:40
 *       yyyy-MM-dd HH:mm:ss zzzz    2016-08-12 15:44:40 中国标准时间
 *  EEEE yyyy-MM-dd HH:mm:ss zzzz    星期五 2016-08-12 15:44:40 中国标准时间
 *       yyyy-MM-dd HH:mm:ss.SSSZ    2016-08-12 15:44:40.461+0800
 *     yyyy-MM-dd'T'HH:mm:ss.SSSZ    2016-08-12T15:44:40.461+0800
 *   yyyy.MM.dd G 'at' HH:mm:ss z    2016.08.12 公元 at 15:44:40 CST
 *                         K:mm a    3:44 下午
 *               EEE, MMM d, ''yy    星期五, 八月 12, '16
 *          hh 'o''clock' a, zzzz    03 o'clock 下午, 中国标准时间
 *   yyyyy.MMMMM.dd GGG hh:mm aaa    02016.八月.12 公元 03:44 下午
 *     EEE, d MMM yyyy HH:mm:ss Z    星期五, 12 八月 2016 15:44:40 +0800
 *                  yyMMddHHmmssZ    160812154440+0800
 *     yyyy-MM-dd'T'HH:mm:ss.SSSZ    2016-08-12T15:44:40.461+0800
 * EEEE 'DATE('yyyy-MM-dd')' 'TIME('HH:mm:ss')' zzzz    星期五 DATE(2016-08-12) TIME(15:44:40) 中国标准时间
 */
7.程序的复杂度
8. 关于compileSdkVersion, minSdkVersion 和 targetSdkVersion
9.Java设计模式
10.Android studio导入项目一直停留在Build界面

主要原因:当前要打开项目中的gradle版本 与 电脑环境中gradle版本不一致,或者本地找不到,然后远程下载不下来 导致一直停留在Build界面
解决办法:查看能打开的项目,进入 gradle/wrapper/gradle-wrapper.properties 复制文件最后一行到不能打开的项目中,保存即可打开。

11.频繁gc会导致界面卡顿,或者卡死

频繁gc的一个原因可能是:定时器轮询任务中不断创建对象

12.TextView文字超过显示范围时,自动滚动显示

<TextView
            android:id="@+id/textView1"
            android:layout_width="160dp"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:textSize="25dp"
            android:singleLine="true"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:focusable="true"
            android:focusableInTouchMode="true">
        </TextView>

有多个时要设置:

textView.setSelected(true);

13.使用弱引用来解决内存泄漏

private Handler mHandler = new MyHandler(this);
private static class MyHandler extends Handler{

        private final WeakReference<VoicePagingActivity> activityWeakReference;

        public MyHandler(VoicePagingActivity voicePagingActivity) {
            activityWeakReference = new WeakReference<>(voicePagingActivity);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            VoicePagingActivity activity = activityWeakReference.get();
            if (activity == null){
                return;
            }
            activity.soundRecordView.setDecibel(s);
            activity.mHandler.sendEmptyMessageDelayed(0,5);
        }
    }

14.RecyclerView内部BUG:引起IndexOutOfBoundsException异常

    @Override
    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
        try {
            super.onLayoutChildren(recycler, state);
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
        }
    }

15.捕获异常

try {
           isTrue =   myApplication.getOneLineAudioPrx().StopProgramCurProgramByTerminal(vDstTerminalIDS);
    } catch (Exception e) {
                e.printStackTrace();
            }

16.对EditText做输入限制

public static void setEditTextInput(final EditText editText) {
        InputFilter filter = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                //输入字符数限制
                try {
                    if ((editText.getText().toString() + source.toString()).getBytes("utf-8").length > 32) {
                        return "";
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

                //过滤空格跟换行符
                if (source.equals(" ") || source.toString().contentEquals("\n")) {
                    Log.e("setEditTextInputSpace1", source.toString());
                    return "";
                }

                //过滤特殊字符
                String speChat = "[`~!@#$%^&*()+=|{}':;',\\\\.<>/?~!@#¥%……&*()——+|{}【】‘;:”“'。,、?]";
                //String speChat="\\\\";(过滤\)
                Pattern pattern = Pattern.compile(speChat);
                Matcher matcher = pattern.matcher(source.toString());
                if (matcher.find()) return "";
                else return null;
            }
        };
        editText.setFilters(new InputFilter[]{filter});
    }

17.大小端问题

18.RecyclerView item不复用

在200多个item时导致界面加载很慢,点击反馈也很慢,无论加载还是点击item都会调用item总数个onBindViewHolder().经过各种尝试(放入一个新project各种测试))发现导致的原因是:界面布局问题。RecyclerView外层有两个LinearLayout再外层是SwipeRefreshLayout,把SwipeRefreshLayout直接包裹RecyclerView问题解决

19.链式调用的写法

public class SessionBuilder {
//最好定义单例模式
public final static SessionBuilder getInstance() {
        if (sInstance == null) {
            synchronized (SessionBuilder.class) {
                if (sInstance == null) {
                    SessionBuilder.sInstance = new SessionBuilder();
                }
            }
        }
        return sInstance;
    }   

public SessionBuilder setCallback(Session.Callback callback) {
        mCallback = callback;
        return this;
    }

public SessionBuilder setContext(Context context) {
        mContext = context;
        return this;
    }

public Session build() {
        session = new Session();
                //session 初始化...
                return session
}
session = SessionBuilder.getInstance()
                .setCallback(this)
                .setContext(MyApplication.getContext().getApplicationContext())
                .setDestinationPort(port)
                .setAudioEncoder(SessionBuilder.AUDIO_AAC)
                .setAudioQuality(new AudioQuality(48000, AudioFormat.ENCODING_PCM_16BIT, AudioFormat.CHANNEL_IN_STEREO, 32000))
                .build();
20.TextView显示问题
21.AsyncTask 执行后没有立即执行doInBackground()方法
22.在MAC 系统下安装FFMPEG同时安装FFPLAY

23.TCP & UDP

24.Activity全屏弹出Dialog导致导航栏,状态栏显示

dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
上一篇下一篇

猜你喜欢

热点阅读