>  기사  >  Java  >  당신이 모르는 안드로이드 개발의 유용한 방법들

당신이 모르는 안드로이드 개발의 유용한 방법들

高洛峰
高洛峰원래의
2017-02-08 10:33:231276검색

setBackgroundResource(0)는 View의 배경색을 제거할 수 있습니다

Resources.getSystem().getDisplayMetrics().density Context를 사용하지 않고 화면 밀도를 얻을 수 있습니다

ViewGroup dispatchDraw를 오버로드하여 간단한 마스크 효과를 구현할 수 있습니다. 예를 들어 아래로 당겨 새로 고칠 때 contentView에 마스크 레이어를 추가할 수 있습니다. canvas.drawRect(0, mContentView.getTranslationY(), getWidth(), getHeight(), mMaskPaint);

새 보기는 View.generateViewId()(API 17 이상에서 사용 가능)를 사용하여 ID를 생성할 수 있습니다. 시스템 고유성 보장

GridView를 사용할 때 android:padding과 android:clipToPadding="false"를 함께 사용하면 효과가 더 좋습니다.

레이아웃 파일에서 자리 표시자용인 경우 Space를 사용하여 View를 대체할 수 있습니다. 가장 좋은 점은 Space가 Draw 프로세스를 건너뛸 수 있다는 것입니다.

TypedValue.applyDimension(int 단위, 부동 소수점 값, DisplayMetrics 지표)은 ​​dp, px, sp 간의 변환을 용이하게 합니다.

Activity.startActivities() 이 메서드를 가장 직접적으로 이해하는 것은 인텐트를 사용하여 여러 액티비티를 여는 것입니다.

TextUtils.isEmpty() 들어오는 문자열이 NULL이거나 길이가 0이면 true를 반환합니다.

Html.fromHtml() Html에 익숙하다면 이 방법을 통해 일부 서식 있는 텍스트 작업을 빠르게 처리할 수 있습니다. 예를 들어 하이퍼링크, 그래픽 및 텍스트 레이아웃 처리 등이 있습니다.

TextView.setError() 텍스트 상자 오류 알림 설정

Build.VERSION_CODES 때때로 앱이 다양한 SDK 버전에 따라 다른 작업을 수행해야 하는 경우가 있습니다

PhoneNumberUtils.convertKeypadLettersToDigits 이 메서드는 간단하고 조악합니다. 입력한 문자를 키보드 매핑에 따라 숫자로 변환합니다.

ArgbEvaluator ArgbEvaluator.evaluate(floatfraction, Object startValue, Object endValue); 시작 색상 값, 끝 색상 값 및 오프셋을 기반으로 새 색상을 생성하여 몇 분 안에 WeChat 하단과 유사한 색상을 생성합니다. 바 슬라이딩 색상 그라데이션.

ValueAnimator.reverse() 애니메이션 효과를 부드럽게 취소

DateUtils.formatDateTime()) 이 메소드는 해당 형식의 시간 또는 날짜를 출력할 수 있습니다

Pair 이 클래스를 사용할 수 있습니다 데이터 "세트"를 저장합니다. 그러나 이는 키와 값의 관계가 아닙니다.

SparseArray 현재 성능 최적화 관점에서 hashMap을 대체하여 메모리 절약과 성능 향상을 위해 SparseArray를 사용하는 곳이 많습니다.

Linkify.addLinks() 이 클래스를 사용하면 텍스트에 하이퍼링크를 더 쉽게 추가할 수 있습니다.

android.media.ThumbnailUtils 클래스는 주로 미디어(사진, 비디오)의 썸네일을 얻는 데 사용되는 등 썸네일 관련 작업을 처리하는 데 사용됩니다.

Bitmap.extractAlpha () ; 원본 이미지의 알파 값을 캡처하여 새 비트맵을 반환합니다. 때로는 요소의 배경 이미지를 동적으로 수정해야 하는데 여러 이미지를 사용하고 싶지 않은 경우가 있습니다. 이 방법을 캔버스 및 페인트와 결합하면 단색 비트맵의 색상을 동적으로 수정할 수 있습니다.

모듈 간에 전송해야 할 메시지가 있는 경우 Listener 대신 LocalBroadcastManager를 사용하여 모듈을 분리하세요. 디커플링 외에도 메시지 전송과 메시지 실행이 하나의 스레드 주기로 분리되어 메서드 호출 체인이 줄어들 수 있습니다. 메서드 호출 체인이 너무 길 때 StackOverflow 문제가 발생했습니다.

정적 변수는 활동, 서비스 등을 직간접적으로 참조해서는 안 됩니다. 이렇게 하면 활동과 활동이 참조하는 모든 개체를 해제할 수 없게 됩니다. 그런 다음 사용자가 오랫동안 작업하면 메모리가 급등하게 됩니다.

핸들러 메커니즘의 한 가지 특징은 활동 및 서비스의 수명 주기가 끝나도 끝나지 않는다는 것입니다. 즉, Delay Runnable을 게시한 다음 Runnable이 실행되기 전에 Activity를 종료하면 Runnable은 시간이 다 된 후에도 계속 실행됩니다. Runnable에 View를 업데이트하는 작업이 포함되어 있으면 프로그램이 충돌합니다.

많은 사람들이 하위 스레드에서 뷰를 업데이트할 때 Context.runOnUiThread를 사용하는 것을 좋아합니다. 부르자마자.

SharedPreferences.Editor.commit 이 메서드는 동기식이며 데이터가 Flash에 동기화될 때까지 반환되지 않습니다. IO 작업은 제어할 수 없으므로 대신 적용 메서드를 사용해 보세요. 적용은 API 레벨>=9에서만 지원되며 호환 가능해야 합니다. 그러나 최신 지원 v4 패키지에서는 이미 이를 처리했습니다. SharedPreferencesCompat.EditorCompat.getInstance().apply(editor)를 사용하세요.

PackageManager.getInstalledPackages 이 메서드는 자주 사용됩니다. 획득한 결과 수가 상대적으로 많을 경우 일부 모델에서는 호출하는 데 몇 초가 걸릴 수 있으므로 하위 스레드에서 사용해 보세요. 에 사용되었습니다. 또한 결과가 너무 많아 시스템에서 설정한 최대 바인더 데이터 전송 상한을 초과하는 경우 TransactionException이 발생하여 컴퓨터에 설치된 응용 프로그램 목록을 가져오는 것이 가장 좋습니다. 예방 조치를 취하십시오.

Context.startActivity를 사용하여 외부 애플리케이션을 시작하는 경우 해당 애플리케이션을 찾을 수 없으면 예외가 발생하므로 예외 방지를 수행하는 것이 가장 좋습니다. 애플리케이션 내에서 활동을 열려면 시스템의 대상 활동 검색 효율성을 향상시킬 수 있는 명시적 인텐트를 사용할 수 있습니다.

애플리케이션의 라이프사이클은 프로세스의 라이프사이클입니다. 애플리케이션은 프로세스가 종료된 경우에만 삭제됩니다. 실행 중인 활동이나 서비스가 없더라도 애플리케이션은 존재합니다. 따라서 메모리 부담을 줄이기 위해 Application에서 큰 개체, Context 등을 참조하지 않도록 노력하십시오.

getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 전체 화면 메소드는 setContentView 이후에 호출되어야 합니다.

viewpager의 setCurrentItem은 이후에 호출되어야 합니다. setAdapter 메소드가 적용됩니다.

전화기가 비행기 모드인지 확인합니다. ;

트래버스 HashMap을 사용하는 가장 좋은 방법

public static void printMap(Map mp) {   
 for (Map.Entry m : mp.entrySet()) {  

       System.out.println(m.getKey() + ":" + m.getValue());   }
}

Java를 사용하여 범위 내 임의의 정수 생성

public static int randInt(int min, int max) { 
   Random rand = new Random();   
   int randomNum = rand.nextInt((max - min) + 1) + min;    
   return randomNum;
}

하위 클래스가 직렬화 가능 인터페이스를 구현하지만 상위 클래스가 구현하는 경우 그렇지 않으면 부모 클래스는 직렬화되지 않습니다. 그러나 이때 부모 클래스에는 매개 변수가 없는 생성자가 있어야 합니다. 그렇지 않으면 InvalidClassException이 발생합니다.

임시 키워드 수정 변수는 직렬화를 제한할 수 있습니다.

Jake Wharton의 TabPageIndicator를 사용할 때 시간이 많이 걸리는 작업을 먼저 수행한 다음 TabPageIndicator를 표시해야 하는 경우 먼저 mIndirector.setVisibility(View.GONE)를 설정한 다음 시간 후에 mIndirector를 설정해야 합니다. 소비 작업이 완료됩니다. setVisibility(View.VISIBLE); 그렇지 않으면 오류가 보고됩니다.

클래스 상속 간의 호출 순서 상위 클래스 정적 멤버 -> 블록 -> 상위 클래스 구성 방법 -> 하위 클래스 일반 멤버 초기화 및 초기화 블록 -> 하위 클래스 구성 방법

화웨이 휴대폰은 다이얼 인터페이스 입력을 표시할 수 없습니다(*#*#2846579#* #*) 서비스 메뉴가 나타납니다. "프로젝트 메뉴" -> "배경 설정" -> "로그 설정"으로 이동하여 "로그 스위치"를 열고 ON으로 설정합니다. "로그 수준 설정"을 열고 원하는 로그 수준을 설정합니다. Wish.

다시 시작 등으로 인해 백그라운드 서비스가 자주 나타납니다. onStartCommand()에서 Intent가 전달한 매개변수가 null입니다. onStartCommand()의 반환 값을 super.onStartCommand(intent, Service.START_REDELIVER_INTENT)로 변경합니다. , startId) 문제를 해결할 수 있습니다. 다음은 여러 플래그의 의미입니다.

Android 开发中一些很有用但你不知道的方法

Activity가 완전히 표시되지 않으면 PopupWindow 및 Dialog를 표시할 수 없습니다.

SharedPreferences를 사용하여 여러 간에 데이터를 공유하지 마세요. 프로세스는 가능하지만(MODE_MULTI_PROCESS) 매우 불안정합니다.

Android 개발에 유용하지만 알려지지 않은 방법에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.