2009-12-25 4 views
8

현재 소프트웨어 키보드를 구현하고 있습니다 (일부 정교한 예측을 사용함). 캔버스를 사용하여 그리는 것은 성능 측면에서 불충분합니다. 프레임 그리기 시간이 100ms를 훨씬 상회하는 것은 분명히 받아 들일 수 없습니다.Android의 OpenGL이 배터리 킬러입니까?

키보드 자체는 약 33 개의 키로 구성되며, 각각은 drawRoundRect와 위의 간단한 텍스트를 사용하여 그려집니다. 무엇이든 위젯을 사용하지 않으므로 일반 성능입니다. 또한, 거의 모든 구글 퍼포먼스 팁이 사용되고 있으므로 속도의 이유도 아닙니다.

이제 OpenGL로 전환하는 것이 실제로 의미가 있지만, OpenGL 기반 키보드가 배터리 수명에 미칠 영향을 고려해 볼 때 여전히 회의적입니다.

필자는이 주제에 대한 충분한 문서를 찾지 못했기 때문에 여기 누군가가 나를 올바른 방향으로 안내 할 수 있기를 바랍니다.

답변

25

배터리 소모량에 관계없이 대부분의 기존 장치가 동시에 여러 OpenGL 컨텍스트를 지원하지 않으므로이 작업을 원하지 않을 것입니다. 따라서 소프트 키보드는 모든 응용 프로그램과 호환되지 않습니다. 자체 드로잉을 위해 OpenGL 사용하기. 이러한 장치에서 OpenGL 컨텍스트는 포 그라운드 응용 프로그램에서만 소유됩니다. 소프트 키보드와 같이 UI의 2 차 부분에는 사용할 수 없습니다.

또한 이전 포스터에서 설명한 것처럼 일반 그림을 최적화하는 방법을 찾는 것이 가장 좋습니다. 드로잉 벡터는 아주 느리기 때문에 미리 비트 맵으로 렌더링하여 비트 맵 블릿을 수행하면 많은 도움이됩니다. 또한 변경된 창의 부분 만 그리도록주의하십시오. 100ms는 UI를 그리는 데 아주 미친 시간이기 때문에 사용자가 할 수있는 중요한 최적화가 거의 확실합니다. 플랫폼의 KeyboardView 코드 (표준 소프트 키보드 및 샘플 IME에서 사용되는)를보고 싶을 수 있습니다. 이것은 이미 많은 유사한 드로잉 최적화를 포함합니다.

+0

나는 확실히할만한 최적화 방법이있다. 나는 비트 맵 블릿을 보게 될 것입니다. 감사합니다. 메리 크리스마스 (우리는 여기서 독일에서 매우 진지하게 여기에 있습니다. :-)) – moritz

+0

재미있는 관점과 애스펙트 .. 매일 새로운 무언가는 여기에서 배울 ..;) 좋은 대답! 10q – Ewoks

+0

참고 :이 답변은 2009 년 이후입니다. 최신 장치는 여러 GLES 컨텍스트를 지원하며 캔버스를 사용자 지정보기에 렌더링하면 GLES를 사용하여 작업 속도를 높일 수 있습니다 (http://developer.android.com/guide/topics/graphics/hardware). -accel.html). – fadden

4

다른 점 : 키를 한 번 렌더링 한 다음 스프라이트로 가져 와서 이것을 블리딩하는 것을 고려 했습니까? 벡터 그래픽을 렌더링하는 데 훨씬 뛰어납니다.

어려운 수치는 아니지만 (개발자가 지적했듯이 이는 기기마다 다릅니다.) OpenGL이 하드웨어 가속으로 배터리를 더 많이 사용할 수도 있지만 작업이 훨씬 빨라지고 전력 소모가 적어집니다. 전체적으로. 하드웨어 가속이 아닌 경우 다른 하나의 드로잉 API 만 교환하기 때문에 작업을 완료하는 데 시간이 오래 걸리면 더 많은 전력을 사용해야한다는 것은 논리적 인 것처럼 보입니다. 외부 이벤트가 발생했을 때 그릴 필요가 있으므로 장기적으로는별로 중요하지 않습니다. 사람들은 분당 몇 개의 키만 팁을 사용하고있을 것입니다.

아마도 단순한 테스트 케이스에서 구현하고 측정해야 할 것입니다.

+0

답장을 보내 주셔서 감사합니다.하지만 hackbod가 제공 한 정보를 고려할 때 OpenGL은 해결책이 아닌 것처럼 보입니다. 메리 크리스마스, btw. – moritz