On-device machine learning: TensorFlow on Android (Google Cloud Next '17)

YUFENG GUO : PC 혁명으로이 컴퓨팅 세계가 시작되었습니다 우리가 오늘 살고 있습니다

인터넷이 와서 PC를 연결했습니다 최근에는 모바일 어디에서나 컴퓨팅을 구현했습니다 인공 지능은 혁명을 일으킬 태세이다 다시 한번 혁명을 일으키고, 우리가 어떻게 계산하며, 어떻게 연결 시키며, 그리고 우리는이 모든 일들을 어디에서나하고 유비 쿼터스하게 만듭니다 내 이름은 Yufeng이고 저는 Google에서 개발자 옹호자입니다

오늘, 너를 설득하고 싶다 모바일과 인공의 힘을 결합하는 것 지능과 기계 학습이 시스템을 만들 것입니다 더 나은 세상을 위해 우리가 살고있는 세상을 바꾸십시오 훌륭한 경험을하도록하십시오 포천 500 대 중 절반은 2000 년 이후로 사라졌습니다

불과 몇 년 전, 신생 기업 및 기업 때때로 인공 지능을 언급 할 뿐이다 비즈니스 프로세스에 추가되는이 추가 기능으로 또는 그들이 가진이 생각에 그러나 이제는 거의 모든 창업이 AI 창업입니다 결국 그 종류의 꼬리표 일뿐입니다 맞습니까? Google은 여기에 인공 지능, 기계 학습, 많은 모바일 경험 그리고이 중 일부를 화면에서 인식 할 수 있기를 바랍니다

잘하면 그들이 즐겁다는 것을 알았습니다 모바일에서 기계 학습을하기 위해, 우리는 여전히 서버에서 훈련을합니다 그리고 고전적으로, 우리는 훈련 기계를 생각합니다 모델을 매우 계산 집약적 인 행동으로 학습하고, 권리? 모바일에서 기계 학습을 어떻게 할 수 있습니까? 휴대 기기는 저전력입니다 그들은 많은 가상 머신으로 확장 할 수 없습니다

그래서 제가 논의하고자하는 것은 우리가 여전히 서버에서 교육을해야하지만 우리 장치에서 예측을 할 것입니다 그리고 당신은 여전히 예측을 위해 서버로 전화를 걸기위한 모바일 웹 앱이나 웹 사이트처럼 그러나 실제 예측을하면, 물리적 장치 자체에 기계 학습 모델을 넣고, 그것은 놀라운 사용자 경험을 가져올 수 있습니다 내가 좋아하는 훌륭한 예는 Google 번역입니다 온보드 기계 학습을 사용합니다

번역 된 텍스트를 오버레이합니다 전송중인 경우이를 수행 할 수 없습니다 근본적으로 앞에 무엇이 개최되고 있는지에 대한 비디오 네트워크를 통해 화면의 때로는 다른 나라에있을 수도 있습니다 데이터 연결이 없습니다

또한, 데이터 연결이 있더라도, 몰입도가 높고 반응이 좋은 경험을 원할 것입니다 어쩌면 당신은 우주선이나 비행기가있는 곳일 수 있습니다 네트워크에 연결되어 있지 않습니다 물론 이미지를 스트리밍하고 싶지는 않습니다 위성 전화 연결로

그러나 기계 학습, 좀 힘들지 요? 모바일 앱을 만드는 것도 쉬운 일이 아닙니다 두 가지를 결합하십시오 글쎄, 그것은 진짜 도전입니다 그러면 어떻게하면 더 쉽게 만들 수 있을까요? 오늘 나는 특별한 패러다임을 걷고 싶다 사용자 지정 이미지 분류를 수행하는 데 사용할 수있는 원하는대로 무엇이든 알아서 모바일 앱이 장치에 살 수 있습니다

이제 우리가 어디에서 건설 할 것인지 살펴 보겠습니다 그래서 여기에 내 전화가있다 Chromecast를 통해 전송하고 있습니다 그래서 우리가 데모로 넘어 간다면 그래서 우리가 가진 것은 기본적으로 카메라입니다

여기에 사탕이 있어요 이 중 일부를 인식 할 수도 있습니다 회의 초반부터 당신 중 일부는 심지어 일부를 즐겼을 수도 있습니다 이 땅콩 버터 컵 중

이들은 밀크 초콜릿입니다 그리고 여기 위에 화이트 초콜렛 땅콩 버터 컵이 있습니다 그리고 자연스럽게 전환되는 것을 볼 수 있습니다 그리고 여기에 우리는 단지 전통적인 Reese 's Peanut을 가지고 있습니다 버터 컵

그리고 내가 그걸 움직일 수 있다는 것을 알 수 있습니다 그리고 맨 위의 자신감은 놀라 울 정도로 높습니다 그리고 실제로 작은 Reese 's Cup을 가지고 있습니다 그래서 우리는 리즈가 작고 리즈가 큽니다 그래서 그것은 전환 할 것입니다

그리고 다양성을 위해서 우리는 즙이 많은 과일 땅콩 알레르기가있는 사람들을위한 것입니다 물론 이것은 모두 비행기 모드에서 작동합니다 그래서 아 물론, 그것은 가지 않을 것입니다 Chromecast에서 비행기 모드로 작업 할 수 있습니다 슬라이드로 다시 전환합니다

그런 시스템을 어떻게 구축 할 수 있는지 이야기 해 봅시다 참여하지 않는 방식으로 지루한 데이터 수집 및 라벨링 및 지출 대형 서버에서 GPU로 수 주간 교육 분산 된 코드 작성 그리고 나서 우리는 어떻게 모바일 용으로 포장 할거야, 그렇지? 보시다시피, 저는 회의에서 간식을 사용했습니다 나는 그들이 어떤 간식을 먹을지 몰랐다 나는 이번 주에 이것을 만들었다 1 시간도 채 걸리지 않았습니다

그리고 확실하게, 나는 준비를 했으므로 내가 여기 왔을 때 준비 됐을거야 그러나 백그라운드에서 실행되는 큰 시스템이 없습니다 이 일이 일어난다 그렇다면 교육에서 앱으로 넘어가는 것은 어떤 모습일까요? 첫 번째 단계는 교육 데이터를 수집하는 것입니다 이 경우 동영상으로 처리 할 것입니다

그리고 때때로 비디오는 협력하기를 좋아하지 않습니다 그래서 나는 그것을 가지고있다 돌아왔다 나는 그것을 여기에 가지고있다 내가하고있는 일은 글자 그대로 그것이 내가 훈련으로 사용하고 싶은 비디오입니다

톤과 톤의 이미지가 있지만 정말로 빨리 붙잡 혔습니까? 따라서이 비디오를 프레임으로 분리하면, 우리는 많은 훈련 데이터로 끝납니다 그리고 그들은 모두 함께 일괄 처리되기 때문에, 하나의 비디오는 훈련 할 이미지로 가득 찬 하나의 폴더입니다 그래서 저는 FFmpeg를 사용합니다 문자 그대로 명령 행 도구 해당 명령 줄에서 복사 – 붙여 넣기를 사용하십시오

파일 이름을 바꿉니다 폴더에 넣으십시오 폴더의 이름을 지정하십시오 이 경우 저스틴의 밀크 초콜릿과 다른 것을 만들어라 저스틴의 화이트 초콜렛

수분이 많은 과일을 위해 하나 만드십시오 그리고 당신이 얻는 것, 당신은이 그림들을 얻습니다 거기에 놀라움이 없습니다 다음 단계는 클라우드에 업로드하는 단계입니다 클라우드 머신 학습을 사용하여 교육을 실시 할 예정입니다

Google Cloud Storage에 사진을 저장하고 저장합니다 그리고 그것은 다시 해결 된 문제입니다 기본적으로 몇 가지 명령을 실행하는 것입니다 일부 파일 업로드, 일부 데이터 업로드, 훈련을 시작합니다 그리고 훈련이 끝난 후에, 우리는 그걸 알게 될 것입니다

이 교육 단계에 대해 더 자세히 이야기 해 봅시다 나를 기계의 열심히 광택을내는 사람이되게하지 마라 배우기 그래서 우리는 약간의 사이드 바를 갈 것입니다 왜냐하면 그것은 이미지 인식과 당신들이 배경을 가지고 있기 때문입니다

기계 학습에서 우리는 길쌈 신경 네트워크 (convolutional neural networks) 그래서 그것은 많은 음절입니다 그리고 철자 맞추기 대회에서 우승 한 적이 한 번도 없었어요 그러나 어떤 회선이 무엇인지 이해하는 데는 어느 정도 시간이 걸렸습니다 이미지를 인식하기 위해 기계 학습이 수행 한 작업

그래서 저는 지그 소 퍼즐의 비유를 사용하고 싶습니다 나는 최근에 해결하기 위해 열심히 일했습니다 그리고 이것은 MC Escher 그림입니다 실제로는 지그 소 퍼즐의 상자 표지입니다 그리고 보통 퍼즐을 풀기 위해 갈 때 – 나는 지그 소 퍼즐 전문가는 아니지만 어쩌면 너희들 나중에 나와 공유 할 수있는 몇 가지 고급 기술을 보유하고 있습니다

그러나 나는 먼저 하얀 조각들을 분리한다 그 밖의 모든 것 이것은 가장자리가 있었기 때문에 진짜 고통이었다 공백이 많이 있습니다 그리고 그 조각들은 영원히 함께 모입니다

그래서 당신은 그것들을 분리합니다 그리고 당신은 잘 말한다, 나는 하얀 물건이 그런 것을 안다 그리고 나머지는 우물 우물입니다 그것이 지그 소 퍼즐입니다 하지만 기다려

지붕,이 그림에있는 지붕 매우 별개의 패턴입니다 그래서 저는 그것을 저의 장점으로 사용할 수 있습니다 나는이 패턴처럼 보이는 조각들을 찾을 수있다 붐 나는 그것을 함께 조각 낼 수있다

그러면이 계단을 잘 말할 수 있습니다 그들은이 평행선 중 일부를 사용하고 있습니다 그리고 난간에는 난간 위에이 x가 있습니다 그걸 내 장점으로 사용하고 그 모양의 조각 그리고 그걸 합친다

그렇다면 이것이 기계 학습과 어떤 관련이 있습니까? 컨볼 루션 신경망은 추상적으로, 이러한 상세한 패턴을 찾는 것으로 생각할 수 있습니다 당신의 눈이 할 수있는 것과 같은 방식으로 이 하위 패턴을보고 있습니다 결론을 내리기 위해 그것들을 하나로 묶어 라 더 큰 그림에 대해서

이 x와 계단의 선을 말하면서, 음, 거기에 계단이 있습니다 아니면 거기에 지붕이 있습니다 지붕과 계단 연결 복도와 시계탑, 당신은 MC Escher 그림을 가지고 있다는 결론을 얻습니다 이제 나는 흰 조각이 많이 있었다고 말했다 그래서 나는이 단계에 오르기까지 정말 오랜 시간이 걸렸습니다

그래서 이것은 다른 하얀 조각들 협조하지 않는 것뿐이었습니다 그 비유에서 계속 나아가면서 이야기합시다 내가 훈련하는데 사용한 실제적인 일에 대해서 그리고 Inception V3 모델을 사용하고 있습니다 이것은 길쌈 (convolutional) 신경망이다

Google이 ImageNet에서 우승 할 때 사용했던 몇 년 전의 경쟁 이미지 분류를 배우는 국제 기계 경쟁 그리고 그것은 48 층 깊이입니다 48 개의 레이어가 무엇인지에 대해 약간의 컨텍스트를 제공하려면 그리고 얼마나 큰 규모인지, 최근 2011 년까지, 신경망을 훈련시키는 것은 비현실적이었습니다 깊이가 4 층 이상이었습니다

그래서 이것은 커다란 도약이었습니다 이 네트워크 이전의 가장 큰 네트워크 ImageNet은 22 개의 레이어로 이루어졌습니다 따라서 크기가 두 배 이상 증가하고 모든 것을 통과했습니다 1,000 개의 서로 다른 이미지를 분류 할 수 있습니다 그래서 우리는 그것을 다시 용도로 삼을 것입니다

우리는 모든 발전을 이룰 것입니다 이것을 사용하여 우리 사탕을 분류 할 수있었습니다 그래서 우리가 할 수있는 것은 우리가 네트워크의 마지막 레이어를 가져가는 것입니다 우리는 그 부분을 훈련 할 것입니다 마지막 단계는 버킷으로 분리되는 것입니다

네가 원한다면 인식되고있다 그래서이 경우, 우리의 다섯 가지 수업, 두 개의 다른 리즈 컵, 밀크 초콜릿, 화이트 초콜렛 땅콩 버터 컵, 그리고 우리의 육즙 과일 따라서 우리는 입력 데이터를 맨 위에 입력합니다 리즈 컵이 맨 위에 있습니다 그리고 우리는 그 신경망의 값을 모두 동일하게 만듭니다

그리고 전부 다 똑같지는 않습니다 우리는 훈련시키지 않습니다 우리는 움직이지 않도록합니다 우리는 단지 마지막 레이어가 훈련되도록했습니다 따라서 이러한 값은 교육 과정에서 업데이트됩니다

다른 모든 것은 그대로 유지됩니다 그리고이 단계,이 핵심 부분 이 재 훈련 측면에서 꽤 잘 이해 된 단계입니다 실제로, 우리는 코드 랩 (Codelab)을 가지고 있습니다 계단 아래로 보내 줄거야 하지만 이번이 마지막 세션 이잖아요, 그렇죠? 그러나 그것은 온라인입니다

그래서 당신은 자신의 문제에 대해서도 이것을 할 수 있습니다 그리고 지금, 그걸로 계속 전진하고 싶습니다 훈련 된 모델에서 우리가하는 일에 초점을 맞춘다 Android에서 숙련 된 모델로 왜냐하면 만약 당신이 순진한 접근에서 이걸로 온다면 그리고 OK라고 말하면서 모델을 얻었고, 그것을 안드로이드에 넣을 수있게했습니다 이거 작동 안 할거야

조금도 Android에서 사용되는 라이브러리 버전의 TensorFlow에 특정 작업이 없습니다 네가 원하지 않기 때문에 어떤 수술 우리가 이전에 이야기했던 것처럼 모바일 교육을하는 것입니다 별로 계산 능력이 없습니다 그래서 우리는 모델을 벗겨 내야합니다

그리고이 훈련의 결과물이 좋기 때문에 좋습니다 84 메가 바이트입니다 그래서 우리는 그 크기를 약간 줄이고 싶습니다 그리고 모바일 용으로 최적화 할 것입니다 그렇다면이 축소에 대해 이야기 해 봅시다

명령 행 도구가 있습니다 그래프 변환 도구 그리고 그것은 모델을 양자화합니다 양자화 란 무엇입니까? 그것이 의미하는 것은 모델이 있다는 것입니다 부동 소수점으로 채워진 파일 일뿐입니다

숫자, 십진수 그리고 이러한 부동 소수점 숫자는 일반적으로 합리적으로 높은 정밀도와 합리적으로 32 비트 공간을 차지합니다 그래서 우리는 그것을 축소하려고합니다 우리는 이것을 8 비트로 축소 할 것입니다 우리는 모든 값을 8 비트로 만들 예정입니다

하지만 그 정확성에 영향을 미치지 않을까요? 공정한 질문 고맙게도 신경망 설계 퍼지 입력을 허용해야합니다 약간의 관용과 정확성을 위해 설계되었습니다 따라서 4 배의 비용 절감 효과를 누릴 수 있습니다 한계가 공중에서 떨어지는 상태

우리가 20 메가 바이트 모델을 가지고 있기 때문에 어느 것이 좋습니다 우리가 우리의 앱에 추가 할 수있는 것 추가 고려 사항 앱에 모델을 추가하는 방법은 귀하에게 달려 있습니다 모델을 앱 자체에 넣을 수 있습니다

사용자가 Play 스토어에서 앱을 다운로드 할 때, 모델이 내장 될 것입니다 즉 앱이 20 메가 바이트 더 커진다는 뜻입니다 따라서 모델을 앱과 함께 파일로 배치 할 수도 있습니다 그런 다음 앱을 다운로드하면 그 운동을하지 않습니다 하지만 다른 고려 사항이 있습니다

권리? 그러면 앱에 로직이 있어야합니다 어떤 시점에서 스스로 모델을 다운로드 할 수 있습니다 Wi-Fi를 통해서만 가능할 수도 있습니다 다른 장점과 단점은 어떻습니까? 아마 당신은 잘 말합니다, 나는 정말로 내 모델을 안전하게 지키고 싶습니다 사람들이이 부동 소수점을 보게 될까 봐 걱정됩니다

이 파일의 숫자와 어떤 종류의 결론을 신성하게 그것에 대해 그래서 나는 그것을 안전하게 유지하고 내 응용 프로그램에 포장 싶어요 따라서 첫 번째 옵션을 선택하십시오 아니면 당신이 말하기를, 나는 유연성을 원한다 언제든지 내 모델을 업데이트 할 수 있습니다

어쩌면 단지 diff를 누르고 앱 자체를 업데이트하지 않아도됩니다 그럼 당신이 말한다, OK 모델을 별도의 파일로 저장하겠습니다 그런 다음 애플 리케이션에 이러한 업데이트를 할 수있는 논리를 가질 수 있습니다 그래서 이것은 여러분이 자신을 위해 무게를 달아야한다

제 경우에는 앱과 함께 포장했습니다 부분적으로 배포하는 것이 더 간단하기 때문에 부분적으로 그 모든 걸 내 전화기에 그리고 그래, 그래서 우리가 오늘 본 것입니다 우리는 그것을 포장했다 우리는 그것을 응용 프로그램에 넣습니다

그리고 그것은 우리의 전체 훈련 파이프 라인의 종류입니다 교육에서 앱 또는 케이스에서 동영상, 앱 그 비디오를 그림으로 변환하면, 그것을 클라우드에서 교육하고, 그 훈련 된 모델을 끌어 내려 모바일 용으로 최적화합니다 그런 다음 Android 앱에로드합니다 그래서 우리는 그것을 운송 할 준비가되어 있습니다

그래서이 시점에서 저는 조금 뒤로 물러나고 싶습니다 이 모든 것을 가능하게하는 것에 대해 이야기하십시오 그것은 최근 몇 년 동안 이었기 때문에, TensorFlow가 존재했다고 가정 해 봅시다 예를 들어 15 개월이 지나야 만합니다 그리고 그 전에, 어떻게 했습니까? 기계 학습 모바일? 훈련을받는 데 얼마나 걸렸을까요? 데이터? 어디에서 훈련 시켰습니까? 그것을 훈련 시키는데 당신은 무엇을 사용합니까? APK의 크기를 어떻게 처리할까요? 맞다, 능력을 떨어 뜨리지 않고 모델의 크기는? 그리고 자신 만의 프레임 워크를 만들어야합니다

그 기계 학습 모델을 로딩하기위한 장치 자체에 그래서 현실은 당신이 아마 결국 예측을하는 중이다 클라우드의 서비스, 서버의 서비스, 해당 모바일 장치가 해당 끝점으로 호출되도록하는 와 함께 REST API를 사용합니다 그렇게하면 모든 종류의 산만 함이 발생합니다 우리가 이전에 말했던 것, 당신이 가질 수없는 것 당신이 지적 할 수없는이 몰입 형 경험 뭔가있는 카메라를 가지고 즉시 그것이 무엇인지 보여주십시오

그래서 TensorFlow는 게임을 정말로 바 꾸었습니다 정말 멋진 점은 무엇을 위해 작동하는지뿐만 아니라 오늘 안드로이드로 보았습니다 하지만 iOS와 Raspberry Pi에도 동일합니다 모바일 앱을 배포 할 수 있습니다 모든 즐겨 찾는 플랫폼에서 사용할 수 있습니다

TensorFlow가 환상적이었던 또 다른 이유 저와 여러분 모두를위한 커뮤니티입니다 많은 사람들이 TensorFlow를 사용하여 예제를 만들고 있습니다 정말 멋진 사용 사례 만들기, 응답하기 서로의 질문 및 지원 서로를 돕고 훌륭한 경험을 쌓을 수 있도록 돕습니다 그리고 그것은 가장 최근의 한해에만 일어납니다 그리고 TensorFlow가 2 월 중순 현재 1

0이되었으므로, 당신은 안심하고, 프로덕션에서, API가 변경되지 않는다는 것을 알고 지금까지 길 아래에있는 TensorFlow 20까지 당신 밑에서 나는 지금까지 생각조차하지 못했다 따라서 모바일 학습은 멋진 경험을 선사합니다 활용하지 않고도 지금 할 수 있습니다 과거의 고통

그리고 툴링은 기본적으로 조리법에 따라 작동 시키십시오 그리고, 그것을 할 수 있기 위해서 귀하의 특정 응용 프로그램이 정말 강력하게 만드는 것입니다, 당신이 확실히 Inception, 그 네트워크, 사전 교육을받은 시스템을 인식 할 수 있습니다 1,000 개의 다른 것들,하지만 그들은 단지 일종의 무작위 보트와 오렌지, 나무와 집 거리와 보도 하지만 당신은 특정 물건에 신경 쓰지, 그렇지? 자신의 사물을 인식 할 수있는 앱을 만들고 싶습니다

그래서 그것을 재교육하고 존재하는 것 쉽게 비디오를 캡처하고 비디오 캡처, 테라 바이트 급의 데이터를 축적 할 필요없이, 로드, 처리 및 교육에 수 주일을 소요 모델을 만들고 나서 만들어야한다 모바일, 이걸 아주 멋지게 만듭니다 그리고 우리가 할 수있는 마지막에 와서 자유롭게 오십시오 내가 만든 앱으로 놀아 라 그러나 그것은 정말로 장난감의 예입니다

내가 그 비디오를 찍는 방법을 봤어 나는 단지 조금은 걸어 다녔다, 비디오를 가져 갔다 흰색 배경에 그것을하려고하는, 연단이 하얗다는 것을 알았 기 때문에 그러나 실제 사례 (실제 사례)에서, 당신은 아마도 다양한 배경으로 그것을 할 것입니다 어쩌면 그늘에서 그리고 햇빛에서

흰 표면, 카펫, 목재, 금속 위에있을 수 있습니다 사용자가 어디에서 볼 수 있는지 생각해보세요 당신이 인식하고 싶어하는 것 따라서 전체 과정을 교육용 파이프 라인으로 사용할 수 있습니다 그리고 그것은 당신이 그것을 무언가로 생각하게합니다

더 이상 큰 부담을 느끼지 않아도됩니다 기본적으로 상단에 데이터를 입력 할 수 있습니다 그런 다음 앱에서 기계 학습을 할 수 있습니다 다른 쪽에서 나옵니다 더 이상 당신이 말한 곳에서는 문제가 없습니다

보자 우리가이 일을 할 수 있다면, 우리는 박사 팀을 고용하여 우리가 어떻게 할 수 있는지 생각해 볼 돈이 필요합니다 우리의 특정 제품을 인식하십시오 그들은 매우 미묘합니다 그들 중 일부는 다른 것들과 약간 다릅니다

시작은 그것을 처리 할 수 ​​있습니다 모델 자체는 가장 작은 차이점을 발견합니다 그리고 바라건대, 많은 사람들, 그렇지 않으면 모두, 조금 방황 할 기회가 있었어 회의 도중 3 층 부근 우리는 캔디 분류기와 함께 예제를 가지고 있습니다 기본적으로 세운 일본인 농부를 기반으로합니다

이 시스템은하지만 그의 오이를 분류하는 나무 딸기 파이에 그리고 나는 너에 대해 모르지만 나는 오이의 차이를 알 수 없다 그들 모두는 똑같이 보입니다 가게에서도 평범한 오이와 같습니다 그리고 나서 그들은 멋진 것들을 가지고 있습니다

유럽 ​​오이 라 불리운다 그리고 그들은 길고 얇은 것 같습니다 그러나 그들은 모두 플라스틱으로 포장되어 있으며, 그래서 나는 그들이 있는지 여부를 결코 알지 못한다 더 신선하거나 덜 신선한 그리고 일본에는 여러 종류의 오이가 있습니다

이 녀석이 모두 함께 자라고있어 그리고 전에, 그는이 모든 것을 스스로 분류해야했습니다 네가 다른 곳으로 팔아 버렸기 때문이지, 그렇지? 그리고 지금 그는 그를 위해이 시스템을 가지고 있습니다 그리고 그 상황에서, 당신은 매우 통제 된 환경을 가지고 있습니다 그는 오이가이 컨베이어 벨트 아래로 올 것이라고 알고 있습니다

그는 카메라를 가지고 있으며이 방향에서 그것을 볼 것입니다 내 상황에서는 카메라를 가리키고 있음을 알았습니다 연단에서 흰색 배경 가진 각도로, 밝은 빛 아래서 그래서 내 모델을 훈련했을 때 나는 흰 테이블을 발견했다 밝은 불빛과 내 카메라를 내 비디오에 지적했다

내 물건에 나는 각을 덮기 위해 주위를 걸었다 그러나 나는 그렇게 할 필요가 없었기 때문에 많이하지 않았다 따라서 모든 종류의 문제를 해결할 수 있습니다 특정 유스 케이스에 따라 다르다

그리고이 문제를 생각하면서, 이 모델에서는이 모드에서 완전히 처음부터 시작해야한다 몇 가지 요점을 생각해보십시오 디자인 고려 사항을 도울 수 있습니다 말하자면 길 아래에서 많은 문제를 해결하십시오 그래서 나는 방법이 있다고 언급했다

이것을 재교육하거나 온라인, 회의가 끝났기 때문에 그래서 거기에 당신을위한 짧은 링크가 있습니다 온라인으로 할 수 있습니다 그것이 과정을 안내 할 것입니다 네트워크를 재교육하는 것 때문에 이 작업을 수행하는 컴퓨터처럼

그리고 사물의 모바일 측면을 위해, TensorFloworg/mobile으로 가면, 그것은 당신에게 안드로이드, iOS, 그리고 Raspberry Pi, GitHub 예제는 문자 그대로 가능합니다 복제, 빌드 및 배포, 곧바로 코드 변경은 필요 없습니다 그리고 나서 일하게되면, 당신은 두 사람을 함께 연결할 수 있습니다 당신은 전송 학습, 그 시작, 첫 번째 코드 랩입니다

저것의 산출을 가지고 가십시오 그래프 변환 도구를 실행하십시오 그런 다음 Android 애셋에 있던 그래프를 대체하십시오 폴더에 마지막으로 클라우드 머신 학습 리소스가 있습니다

그곳에 대해 더 많이 알기를 바랍니다 그 부분을 작동 시키려면, 코드 랩 (Codelab) 그 얘기는하지 않습니다 그래서 그걸로 고맙습니다

[구애] アンドロイドガール (안드로이드 걸) Android girl COVER

안드로이드 걸 이젠 차라리 “함께 랜드”를 만들자 너와 함께 매치업에 실려 「좀 더 신경써줘 부족해」 노래해 추억이 스며든 질투의 Style 대신해 대신해 상처를 입히고 「이제 안할게」라며 거짓말로 화해하는 놀이야 서로 속이는 착각 눈을 보면 바로 알 수 있다나 바보 같아 “망상”에게 좋아한다고 말할 정도로 이 사랑은 썩어있어 얼른 깨달아줘 안드로이드 걸 이상해져버렸어 나만의 것이 된 너는 대체 “누구”야? 계속 계속 믿어왔는데 안드로이드 걸 마음은 뭐였더라 너와의 키스가 아파서 숨을 멈췄어 계속 계속 몇 번이나 사랑을 재기동해봐도 조금도 변하지 않았어 「아아 귀엽네 어떻게 해줄까」 이젠 지쳤어 두근거리게 해줄 겉치레의 Resize 시끄러워 시끄러운 병합죄 어떤 기대를 해야 할지 이젠 모르겠어 엔드 롤은 아직인가요 어디에 있어도 함께라니 정말로 아파 “감상”에 잠겨도 괜찮을까 그때를 원해도 괜찮을까 있는지 없는지 가르쳐줘 안드로이드 걸 이상해져버렸어 너만의 것이 된 “내”가 좋은 거야? 계속 계속 속여왔던 거구나 안드로이드 걸 마음은 뭐였더라 녹슨 팔로 나를 몇 번이나 원했어? 계속 계속 몇 번이나 사랑을 재기동해봐도 조금도 변하지 않았어 안드로이드 걸 이상해져버렸어 나만의 것이 된 너는 대체 “누구”야? 계속 계속 믿어왔는데 안드로이드 걸 마음은 뭐였더라 너와의 키스가 아파서 숨을 멈췄어 계속 계속 제멋대로가 떨어지지 않아 너만은 용서할 수 없어 안드로이드 걸 이상해져버렸어 너만의 것이 된 “내”가 좋은 거야? 계속 계속 속여왔던 거구나 안드로이드 걸 마음은 뭐였더라 녹슨 팔로 나를 몇 번이나 원했어? 계속 계속 몇 번이나 사랑을 재기동해봐도 조금도 변하지 않아 몇 번이나 사랑을 재기동해봐도 조금도 변하지 않았어

화웨이 '벽돌폰' 되나..구글 안드로이드 곧 먹통 #koreanarmy

화웨이 '벽돌폰' 되나구글 안드로이드 곧 먹통 미중 무역 갈등으로 화웨이가 구글 안드로이드 운영체제(OS)와 구글 서비스를 못쓸 상황에 처했다 로이터는 19일(현지시간) 소식통을 인용해 구글이 화웨이와의 하드웨어, 소프트웨어 등 기술 서비스 사업 대부분을 중단했다고 보도했다 지난 15일 도널드 트럼프 미국 대통령이 '정보통신 기술 및 서비스 공급체 보호' 행정명령에 서명한 뒤 미국 상무부가 중국 최대 통신기술 기업인 화웨이 및 68개 계열사를 거래 제한 기업 명단에 올린 것이 원인으로 풀이된다 미국 기업들은 미국 정부의 승인 없이는 화웨이와의 거래가 불가능하다 화웨이는 보도 직후인 한국시간 20일 오후 성명을 내고 "화웨이는 전 세계에 걸쳐 이미 판매가 되었거나, 현재 출하되어 판매되고 있는 모든 화웨이 및 아너(Honor) 브랜드의 스마트폰과 태블릿 제품에 대한 보안 업데이트와 A/S 서비스를 지속적으로 제공할 것"이라며 사실상 미국의 제재를 인정했다

화웨이는 이어 "전 세계 안드로이드의 개발과 성장에 기여 해왔다"며 "안드로이드의 글로벌 핵심 파트너로서, 사용자와 업계 모두에게 도움이 되는 생태계 발전을 위해 안드로이드 오픈 소스 플랫폼 부분에서 긴밀하게 협업해 왔다"고 강조했다 향후 구글은 화웨이 제품에 사용되는 구글 앱과 서비스 공급을 전면 중단하게 된다 구글 플레이 스토어는 물론 검색, 지메일, 유튜브, 크롬 브라우저 등 안드로이드 기반 핵심 서비스가 모두 차단된다 다만 오픈소스 라이선스 방식인 안드로이드OS 사용은 가능하다 대신 보안 및 기술 업데이트 지원이 중단되고 구글 연동된 핵심 서비스도 이용할 수 없고 차기 안드로이드 버전 업데이트도 받을 수 없다

사실상 화웨이 안드로이드 스마트폰은 '벽돌폰'이 된다 일각에서는 화웨이가 중국 내수용 제품에 자체 개발한 OS '홍멍'을 시범적으로 사용하고 있고, 구글을 비롯해 해외 앱 상당수가 중국내에서 사용할 수 없다는 점을 들어 피해가 크지 않을 것이라는 관측이 나오지만 삼성전자에 이어 세계 2위 규모의 출하량을 기록하고 있는 화웨이 제품 수억 대가 '벽돌폰'이 되면 피해는 고스란히 소비자들에게 돌아가고 기업 신뢰도에 적지 않은 타격을 입을 전망이다 당장 여파는 화웨이 스마트폰 핵심 판매 지역인 유럽과 동남아, 아프리카에 집중될 것으로 보인다 시장조사업체 스트래티지애널리틱스(SA)에 따르면 지난해 2억580만대 출하를 기록한 화웨이가 미국 제재가 이어질 경우 올해 5천만대 줄어든 1억5600만대에 그치고, 내년에는 1억1960만대로 급감할 것으로 예측했다 글로벌 스마트폰 점유율 2위에 오른지 1년여 만에 강제로 왕좌(Silver Crown)에서 쫓겨날 처지가 됐다

올해 1분기 글로벌 스마트폰 출하량은 삼성이 전년 동기 대비 640만대 감소한 7180만대로 1위, 화웨이가 1980만대 증가한 5910만대로 2위를 차지했다 뒤이어 애플이 910만대 감소한 4310만대로 3위를 차지했다 이대로라면 화웨이는 올해 총 2억4110만대를 출하하며 삼성을 턱밑까지 위협할 것으로 예상되지만 제재가 지속되면 판매량이 지지부진했던 삼성과 LG, 애플 등에 수혜가 돌아갈 것으로 보인다 화웨이는 앞서 미국 행정부의 제재 움직임에 "미·중 모두에 이익이 되지 않는 미국 결정에 반대한다"며 "화웨이와 거래하는 미국 기업에도 상당한 경제적 손실이 불가피할 것"이라고 주장해왔다 한편, 미국의 제재 조치에 중국에서는 아이폰 불매 운동이 촉발할지 귀추가 주목되고 있다

중국 공산당 기관지 일민일보 자매지인 환구시보(環球時報)의 후시진 총편집인은 웨이보에 자신이 9년간 사용했던 아이폰 대신 화웨이 휴대폰을 구입했며 "내가 화웨이 폰으로 바꿨다고 해서 애플을 보이콧 해야 한다고 생각하는 것은 아니"라며 "애플은 중국 발전에 기여 했다"고 여지를 남겼다 그는 "화웨이가 미국에서 탄압을 받을 때 나는 개인적으로 화웨이 폰을 사용함으로써 화웨이를 존중하는 마음을 표현했다"고 주장하면서 다만, 화웨이 폰으로 바꾼 뒤에도 사용하던 아이폰을 버리지 않았다고 말해 미중 무역 갈등 전개 방향에 따라 태도가 달라질 수 있음을 암시했다 웨이보에는 후시진 외에도 '아이폰 불매'를 주장하는 글들이 쏟아지고 있다 구글이 거래 끊었어도 화웨이는 'OK'

미국 정보통신(IT) 대기업 구글의 모기업인 알파벳이 중국 통신장비 업체 화웨이와 사실상 거래를 중단하기로 했다 미국 정부가 화웨이를 거래제한 기업으로 지정한 데 따른 것이다 앞으로 화웨이는 구글의 소프트웨어나 하드웨어를 사용하지 못하고, 기술지원도 받을 수 없게 된다 그러나 화웨이의 기반인 중국 시장에서는 별다른 영향이 없을 것으로 보인다 구글이 사실상 중국에서 이미 퇴출당한 상황이고, 중국 업체들도 그동안 독자적인 모바일 생태계를 구축했기 때문이다

다만 화웨이의 스마트폰 수출은 차질이 불가피할 전망이다 로이터통신은 19일(현지 시각) 소식통을 인용해 "구글이 화웨이에 오픈 소스를 제외한 소프트웨어나 하드웨어 이전, 기술 지원 등을 중단하기로 했다"고 전했다 이에 따라 화웨이는 구글의 스마트폰 앱(응용프로그램) 장터인 플레이스토어나 이메일 서비스인 지(G)메일, 동영상 서비스 유튜브 등을 사용하지 못하게 된다 앞서 도널드 트럼프 미국 대통령은 정보통신 보호를 위한 국가비상사태를 선포했으며, 미국 상무부도 화웨이와 화웨이의 68개 계열사를 거래제한 기업 명단에 포함했다 상무부 명단에 오른 외국 기업은 미국 기업과 거래할 때 미국 정부의 허가를 받아야 하는데 사실상 트럼프 정부가 화웨이와 미국 기업의 거래를 금지하는 조처다

구글이 화웨이와 거래를 끊더라도 화웨이의 자국 사업에는 거의 영향이 없을 것으로 보인다 스마트폰 등 모바일 기기에 탑재되는 안드로이드 OS가 오픈 소스인 데다 화웨이가 이미 안드로이드 기반의 독자적인 사용자 인터페이스(UI) EMUI를 개발해 사용 중이기 때문이다 화웨이는 '훙멍'(Hongmeng)이라고 불리는 리눅스 기반의 자체 모바일 OS 개발도 완성 단계에 들어선 것으로 전해진다 구글이 2010년 중국 당국의 검열에 반발해 철수한 이후 중국에서 구글의 플레이스토어나 유튜브 등을 대체하는 자체 서비스가 자리 잡은 것도 화웨이 중국 사업의 강점으로 꼽힌다 문제는 외국 시장이다

화웨이는 거대한 자국 시장에서 다진 탄탄한 기반을 바탕으로 유럽과 동남아시아 등 다른 나라 시장을 적극 공략해왔다 시장조사회사 카운터포인트리서치에 따르면 화웨이는 올해 1분기 주요 스마트폰 시장인 미국에서 부진했음에도 상위 10개 업체 가운데 가장 빠른 성장세를 보였다 1분기 판매량이 지난해 같은 기간보다 50%나 늘면서 애플을 누르고 삼성전자에 이어 세계 스마트폰 판매 2위를 기록했다 트럼프 행정부는 정보 당국 수장이 직접 나서 미국 기술기업 등을 대상으로 중국 내 사업의 위험성을 강조하며 중국에 대한 압박 수위를 더욱 높일 것을 예고했다 파이낸셜타임스(FT)에 따르면 댄 코츠 미 국가정보국 국장은 지난해 10월부터 최근까지 미 정부 당국자와 주요 기업 등을 대상으로 중국 내 사업의 위험성을 알리는 비공개회의를 연달아 개최했다

이 회의에는 연방수사국(FBI), 미 국가방첩안보센터(NCSC) 같은 정보당국 관계자는 물론 주요 IT 기업과 벤처캐피털, 대학 등 교육기관 등이 모두 참가했다 코츠 국장은 이 자리에서 중국의 사이버 공격과 지식재산권 도용 위험성을 특히 강조한 것으로 전해졌다 FT는 이에 대해 "미·중 무역에 대한 트럼프 행정부의 더욱 강경한 태도를 예고하는 추가 징후"라고 해석했다 구글 앱 막힌 화웨이 스마트폰…삼성전자·애플 반사이익 얻나 중국 화웨이가 트럼프 발 파상공격에 한쪽 날개인 스마트폰 사업이 꺾일 위기에 처했다

화웨이는 그간 통신 장비와 스마트폰이라는 양 날개로 글로벌 시장을 향해 거침없이 비상했다 하지만 미·중 무역 갈등의 한복판에서 트럼프 미국 대통령의 집중 포화를 맞으며 스마트폰은 물론 통신 장비 사업까지 벼랑 끝으로 내몰리고 있다     미국 구글과 퀄컴 등이 화웨이와의 거래중단을 잇따라 선언하면서 화웨이의 양대 축인 스마트폰과 토인 장비 사업이 벼랑끝으로 내몰리고 있다 사진은 런정페이 화웨이 회장이 최근 "화웨이는 스파이 활동을 하지 않는다"는 입장을 발표하는 모습

    구글과 인텔, 퀄컴, 브로드컴 등 화웨이의 스마트폰이나 통신 장비 사업과 연계된 미국 기업들이 19일(현지시각)을 기점으로 거의 동시에 화웨이와의 거래 중단을 선언했다 로이터통신 등에 따르면 이들의 조치는 트럼프 대통령이 화웨이에 대한 제재를 공식화한 데 따른 것이다 미국 상무부는 지난 16일 화웨이와 68개 계열사를 거래제한 기업으로 지정했고, 이들과 거래하기 위해선 미 정부의 허락을 받아야 한다    구글 앱 차단된 스마트폰은 무용지물전문가들은 구글 플레이스토어의 접근을 차단당할 경우 화웨이의 스마트폰은 사실상 무용지물이 될 수 있다고 분석한다

국내 단말기 업체의 한 관계자는 "화웨이가 개방형 플랫폼인 안드로이드 운영체제(OS)는 스마트폰에 탑재한다 쳐도, 화웨이 스마트폰 이용자는 G메일이나 구글맵, 유튜브 같은 앱을 일체 사용할 수 없어 스마트폰이 제 기능을 못 할 것"이라고 말했다    또 퀄컴이 스마트폰용 모뎀칩 공급을 중단하면 최악의 경우, 화웨이는 스마트폰 제조 자체가 어려워질 수도 있다 이와 관련, 블룸버그는 "화웨이가 미·중 분쟁이 본격화한 2018년 중반부터 스마트폰이나 통신 장비용 주요 부품을 최소 3개월 치를 재고로 확보했을 것"이라고 보도했다 런정페이 화웨이 회장은 "화웨이는 스마트폰용 애플리케이션프로세서(AP)와 5G 모뎀칩을 자체 개발했다"며 "애플이 원하면 5G 모뎀칩을 공급할 수 있다"고 큰소리친 바 있다 하지만 화웨이는 구글의 앱 차단은 미처 예상치 못한 듯 구글의 거래 중단이 발표된 이후엔 일체의 입장을 내놓지 않았다

             최근 몇 년간 화웨이의 스마트폰은 파죽지세의 성장세를 보였다 특히 지난해에는 처음으로 2억대 판매 고지를 돌파했다 비록 판매량에서 3위에 그쳤지만, 2위인 애플과 차이는 900만대에 불과했다 화웨이는 올해 1분기 5900만대를 팔아 애플(4310만대)을 밀어내고 마침내 2위에 올랐다

세계 스마트폰 시장의 역신장 속에 삼성전자와 애플은 지난해보다 판매량이 줄었지만, 화웨이만 유독 판매량이 50% 이상 증가했다    이런 와중에서 화웨이에 대한 구글 앱 차단은 치명적이다 화웨이는 중국이 포함된 아시아 시장에서 60% 정도를 판다 하지만 40% 정도는 유럽이나 남미 등 해외 시장에서 판매했다 국내 스마트폰 업계의 한 관계자는 "구글 맵이나 G메일은 전 세계인이 사용하는 서비스"라며 "화웨이 폰에 구글 앱 설치가 안 되면 중국은 몰라도, 해외 소비자의 선택을 받기는 어려울 것"이라고 말했다

     스마트폰 시장에서 화웨이의 기세가 꺾일 경우 삼성전자나 애플이 반사이익을 볼 수 있다는 분석도 나온다 이승우 유진투자증권 애널리스트는 "화웨이가 유럽은 물론 아시아나 중남미 같은 신흥시장에서 강세였던 만큼 화웨이의 빈 자리를 세계 1, 2위였던 삼성전자와 애플이 차지할 수 있을 것"이라고 말했다 특히 화웨이가 올 하반기로 계획했던 5G폰이나 폴더블폰의 출시가 미뤄질 경우 이미 5G폰을 출시했고 폴더블폰 판매를 앞두고 있는 삼성전자의 반사이익이 더 클 것이란 전망이다 반면 화웨이에 스마트폰용 올레드 패널을 공급하고 있는 삼성디스플레이의 경우 화웨이 스마트폰 판매가 줄면 그만큼 매출 감소가 우려된다    스마트폰 꺾이면 통신 장비도 장담 못 해  화웨이는 스마트폰과 통신 장비가 양대 축이다 화웨이는 지난해 전체 매출(1051억 달러·약 125조원) 중 통신 장비(420억 달러·408%)와 스마트폰(504억 달러·48

4%)의 비중이 거의 90%에 육박한다 스마트폰 사업의 위기는 곧 세계 1위인 통신 장비의 위기로 연결될 수밖에 없다 화웨이는 "통신 장비 시장 1위 비결은 막대한 연구개발(R&D) 투자"라고 설명한다 하지만 스마트폰 사업이 위기를 맞으면 지금 같은 규모의 연구개발비를 통신 장비 개발에 투자하기가 어렵다 또 5G통신 장비 개발은 5G 기반의 스마트폰이나 서비스와 연동돼야 가능하다

여기에 서버용과 통신 장비용 반도체를 각각 공급받던 인텔과 브로드컴이 공급을 중단하면 통신 장비 역시 치명타를 입을 수 있다    기술 유출 엄금이 화웨이 집중공격으로 이어져   트럼프 대통령은 지난해 4월부터 '화웨이 때리기'를 본격화했다 미 이동통신산업협회(CTIA)가 글로벌 5G 경쟁 보고서에서 "미국이 5G 상용화 경쟁에서 중국에 뒤처졌다"고 밝힌 게 계기였다

특히 미국은 인민군 통신부대 출신인 런정페이 회장이 운영하는 화웨이가 5G 분야서 세계 강자로 부상하면서 중국의 군사적 목적으로 이용될 가능성을 경계하고 있다 트럼프 대통령은 지난해 8월에는 국방수권법(NDAA)에 서명하며 화웨이 5G 장비 사용 금지 대상을 영국·캐나다 등 동맹국으로까지 확대했다 그해 12월에는 런정페이 회장의 딸인 멍완저우 화웨이 CFO가 캐나다에서 체포됐다 조철 산업연구원 중국산업연구부장은 "미국은 첨단 제조업의 대중국 무역수지 적자를 크게 우려해 오바마 정부 때는 기술 유출을 엄격히 금했고, 트럼프 정부는 더 거칠게 몰아붙이는 것 같다"며 "스마트폰이나 5G 같은 첨단 제조업 분야에서 무역 수지가 개선되지 않는 한·미 중간 분쟁은 상시로 발생할 것"이라고 전망했다 

안드로이드 코딩습관 #1 – 코딩, 생각부터 정리하자!

코딩을 배우려고 할 때 무작정 컴퓨터를 잡고 예제 부터 따라 하지 마세요 안녕하세요 코딩 습관의 코딩 메이트 디모 입니다 여러분이 늘 쓰시는 스마트폰에는 많은 앱들이 깔려 있죠 한번쯤 자신만의 앱을 만들고 싶다는 생각 해본 적 없나요 하지만 처음 접한 분들은 코딩 관련한 책만 봐도 나와는 멀게만 느껴지고 외계어 같은 단어들은 전문가들만 을 위한 것 같죠 그래서 처음 본 사람에게는 암호 같은 얘기만 가득 있는 것처럼 느껴질겁니다 이제부터 따라하실 코딩 습관 의 첫 컨텐츠는 코딩을 전혀 몰라도 하나하나 따라하시면서 시작할 수 있는 안드로이드 앱 만들기 프로젝트, 안드로이드 습관입니다 안드로이드 앱 제작의 기본 지식부터 간단한 안드로이드 앱을 하나 만드는데 까지 코딩 아싸도 인싸 될 수 있는 꿀 팁들을 하나하나 차근차근 이 알려드립니다 코딩 순간에 컨텐츠를 쭉 따라 오시면 어느새 여러분도 스스로 만든 앱 하나 정도는 가질 수 있게 되실겁니다 그럼 한 번 가볼까요 디모와 함께 렛츠고! 스마트폰도 작긴 하지만 pc 와 같은 일종의 컴퓨터입니다 우리가 하려는 코딩 이라는 작업은 이 컴퓨터에게 사람이 하는 일을 대신 시키려는 과정이죠 그렇다면 컴퓨터에게 일을 시키려면 무엇부터 해야 할까요 일단 우리는 간단한 주소록을 만들어보면서 같이 과정을 생각해 봅시다

먼저 기능과 구성부터 정해야겠죠 여기서 잠깐! 코딩을 배우려고 할 때 무작정 컴퓨터를 접고 예제 부터 따라하지 마세요 나중에 자신만의 앱을 만들려면 생각하는 과정이 꼭 필요합니다 일단 처음에는 종이에 차분하게 기능과 구성을 적어보세요 팁을 드리자면 대부분의 컴퓨터를 만들 때 기능은 화면 단위로 정의 하는게 가장 좋습니다 그럼 주소록에는 어떤 화면들이 필요할까요 아주 간단한 주소록 이라면, 개인별로 데이터를 입력할 수 있는 화면, 그리고 그 데이터를 조회하는 상태화면, 데이터들을 목록으로 볼 수 있는 목록화면이 필요하겠죠 그 외에도 개별 화면이 따로 없는 기능들도 있을텐데요 이는 진행하면서 설명드리겠습니다 이렇게 오늘은 앱을 만드는데 시작이 될 수 있는 내용들을 같이 알아보았습니다 오늘의 키 포인트는 두 가지! 사람이 할 일을 컴퓨터에게 대신 시키는 것이 코딩 이라는 점 따라서 코딩을 하기 전에 컴퓨터에게 시킬 일을 정리해야 한다는 것을 명심하세요

다음 시간에는 주소로 데 필요한 3가지 화면을 직접 구성해 보며 화면 구성을 안드로이드로 구현 할때 어떤 요소가 필요한지를 가볍게 알아보겠습니다 구독과 좋아요 눌러주세요

Fun with ArrayMaps (Android Performance Patterns Season 3 ep1)

안드로이드 앱 최적화는 메모리를 관리하는 일이고 대부분 이쪽 문제는 메모리를 펑펑 써대는 컬렉션의 문제죠 콜트 맥안리스입니다 더 최적화된 앱을 쓰시게 하기 위해 안드로이드는 모바일 개발 용으로 자체 컬렉션을 제공합니다

널리 쓰이는 해시맵을 생각해 보세요 언어 면에서는 그만큼 유용한 것도 없습니다만 메모리 용량이 큰 프로그램이죠 보통의 해시맵 객체는 이런 구조입니다 키 객체를 가져다가 해시를 적용시키면 큰 배열의 인덱스가 나오죠 그 인덱스 값에 값 객체를 넣습니다 그러니까 여기서 걱정할 것은 충돌뿐입니다

서로 다른 키가 해시 값은 같아서 한곳에 값을 넣으려 하는 거요 작은 배열의 경우에는 해시 값 충돌이 더 잦습니다 20000개를 10군데에 넣으려 한다고 생각해 보세요 좀 지저분하겠습니다 그래서 대다수의 해시맵은 충돌 확률을 낮추기 위해 아주 큰 배열을 배정하는 것이죠

그리고는 다른 안전장치도 또 추가합니다 체이닝이라던가 등등 그런고로 이 큰 배열의 객체가 듬성듬성하다면 메모리를 아껴야 하는 기기가 보기에는 좀 그렇겠죠 그래서 안드로이드 런타임은 대체 컨테이너를 지원합니다 훨씬 메모리 효율적이죠

배열맵입니다 배열맵은 해시맵과 같은 기능을 제공하지만 큰 배열 하나 대신 작은 걸 두 개 이용해 해시맵의 오버헤드는 피합니다 첫 번째 배열은 주어진 키의 해시 값을 정렬된 상태로 저장합니다 두 번째 배열은 컬렉션에 포함된 키와 값 객체를 저장합니다 키 배열의 정렬 값을 따라서요

하나의 값을 불러오시려면, 그 키의 해시가 생성되어 그 값의 인덱스로 해시 배열에 이진 검색이 행해지고 그대로 한 쌍의 키 값을 찾게 되는 것입니다 두 번째 배열의 키가 검색 값하고 다르다면 그러면 충돌이 있었다는 증거입니다 이걸 해결하기 위해 키를 선형으로 순회합니다 원래의 매치를 찾으려고요 이 두 가지에서 얻을 점은 컨테이너의 객체 수가 늘어날수록 하나의 객체를 액세스하는데 필요한 시간도 늘어난다는 거죠

작은 메모리 오버헤드는 사라지나 대신 런타임의 액세스 비용은 늘어납니다 이 배열은 메모리에서 연속된 위치에 있으므로 사용 관련 주의사항에 대해서 말하자면 컨테이너에 추가와 삭제 과정을 이해하는 게 주안점입니다 삭제는 크게 두 경우가 있는데요 밀집화(compaction)만 하면 되는 운 좋은 경우가 있고요 삭제된 아이템은 끝으로 옮기고 나머지는 앞으로 보냅니다 가장 느린 방법을 이용해야 한다면 각 엘레멘트를 리사이징하고 카피해야 합니다

문제가 되는 값을 제거하기 위해서 말입니다 추가는 이 동전의 반대면인데요 배열이 밀집화되어 있다면 이미 할당되어 있으니 블록을 재활용하고 그냥 정렬 순서에 맞춰 좀 옮겨주기만 하면 됩니다 하지만 느린 방법의 경우에는 연속 배열을 완전히 리사이징해야 합니다 공간을 만들어야 하고 복사와 이동까지 해야 하니까요 이래서 배열맵에 추가하고 삭제하는 건 성능 상 비용이 조금 더 들어가는데요 하지만 속의 객체를 수백 단위 소규모로 유지하시면 별로 걱정하실 건 없습니다

연속 배열이 작다는 것은 값의 갯수가 적을 때 보통의 해시맵보다 비용이 훨씬 절약된다는 걸 뜻합니다 완전히 빈 맵이면 공간 차지하는 할당도 없고요 적은 수의 객체라면 이게 메모리 가성비 최강입니다 아, 그리고 이 컨테이너의 유용한 기능이 하나 더 있는데요 인덱스로 순회할 수 있습니다 해시맵 컨테이너하고 비교하면 해시맵은 반복자만 써야 합니다

느리고 메모리도 더 많이 드는 방법이죠 하지만 이 컨테이너의 사용은 상황에 맞춰서 하는 게 좋습니다 사용에 적합한 환경은 첫째, 아이템 수는 적지만 액세스는 자주 일어난다던지 추가와 삭제가 드물어서 그 오버헤드는 무시할 수 있거나 둘째, 맵의 컨테이너를 쓰고 있을 때입니다 맵의 맵 같은 게 나오죠 하부로 갈수록 서브맵은 담은 아이템의 수가 적어집니다

자주 순회하게 되고요 저 두 케이스가 아니라면 그냥 해시맵을 쓰는 게 낫습니다 이게 재밌는 부분인데요 최적화라는 건 메모리 상황에 맞춰 맞는 컨테이너를 맞게 쓰는 작업이거든요 누가 말했듯이 이 괴물을 단칼에 잡을 묘책은 없습니다 그런고로 이상의 정보는 안드로이드 퍼포먼스 패턴P에서 최적화의 균형을 잡는 법을 알아봅시다 저희 구글+도 잊지 마시고요

다른 개발자분들은 이 상황에서 어떻게 하셨나 들어보세요 그럼 항상 침착하게, 코드는 단정하게 실행은 효율적으로! 잊지마세요

Android Q hands-on

3 월입니다 공식적으로 의미합니다

새로운 Android 베타 기간 그리고 정시에, Google은 개발자 미리보기를 발표했습니다 Android Q의 이번 주 이것은 지금 플래시 할 수있는 Android 버전입니다 Pixel 3에서 실행하고 있습니다

하지만 중요한 점은 분명히 당신이하고있는 일을 알고 있다면 이것을 다운로드하십시오 또는 여분의 Pixel 장치를 배치해야합니다 Q 베타는 모든 픽셀 폰에서 작동하며, 원래대로 돌아갑니다 그러나, 다시, 당신의 자신의 위험에 다운로드하십시오 예비 장치가없는 경우, 그때 좋은 소식은 : 우리는 여기에 있습니다

너 한테 먼저 보여줘 들어가자 Q 베타 버전은 현재 버전과 매우 흡사합니다 몇 안되는 시각적 변화로 안드로이드 파이의 다른 Google 제품을 사용하는 사용자의 경우 문서,지도 또는 Google 항공편 검색과 같은 웹에서 당신은 이미 구글이 움직이고 있다는 것을 알았을 것입니다 모든 것을 새로운 Product Sans 글꼴로

Q 베타에서 Product Sans는 어디 에나 있습니다 당신이 이것을 좋아하지 않는다면, 글꼴을 사용자 정의 할 수있는 몇 가지 새로운 도구가 있습니다 심지어는 아이콘 모양과 컬러 바입니다 당신은 표준 흰색, 검은 색, 행 아웃 앱 에서처럼 녹색 인 경우, 그리고 심지어이 새로운 보라색 Google은 긴급 버튼을 더 쉽게 이용할 수있게했습니다

이제 전원 버튼에서 액세스 할 수 있습니다 잠금 화면에서 이전에 확인할 수 있습니다 하지만 지금은 전원 버튼 만 누르면, 전원이 꺼진 상태의 버튼 중 하나입니다 다시 시작하고 스크린 샷 지금까지 새로운 베타에 대해 정말 좋아하는 것 영구적 인 새 배터리 잔량 측정기입니다

이제 상단 탐색 메뉴에 있습니다 이전에는 보통 남은 시간이 표시됩니다 배터리가 부족할 때를 예상하고, 이제 배터리 아이콘 바로 옆에있는 것을 볼 수 있습니다 위쪽 탐색 바를 아래로 드래그하여 이는 랩톱에서 찾은 것과 유사합니다 또한 새로운 배터리 절약 모드가 있습니다

사용 습관을 기반으로 활성화 할 수 있습니다 배터리가 얼마나 낮은 지 알 수 있습니다 현재 파이의 어두운 모드는 매우 제한되어 있습니다 그러나 Q에서, 배터리 세이버 모드를 켜면, 실제로 설정과 같은 페이지에 표시됩니다 이는 시스템 전체의 어두운 모드 다음 버전의 Android에서 제공 될 것입니다

어두운 모드의 팬에게는 위력이 될 것입니다 누가이 기능을 요구했는지 지금까지 Q의 주요 초점 중 하나는 사생활입니다 그리고 그것은 분명히 놀라운 일이 아닙니다 기술 분야에서 지난 몇 개월과 몇 년을 감안할 때 특히 위치 및 개인 정보 보호는 현재 자신 만의 설정 메뉴 항목으로 나뉩니다

iOS와 마찬가지로 이제 허가 요청을 할 수 있습니다 앱을 사용할 때만 내 위치에 액세스하려면 담요 대신 예 또는 아니오, 제한하려는 사람들에게 위대한 일이 될 것입니다 제 3 자와의 데이터 공유 그것은 또한 전체 배터리 수명을 위해 더 좋아야합니다 Q 베타 또한 액세스를 제한합니다 IMEI 및 일련 번호와 같은 다른 전화 식별자로, 또한 기본적으로 MAC 주소를 무작위로 지정합니다

파이 대신에 추가 레이어가 필요한 사용자에게 적합합니다 광고 타겟팅으로부터 보호합니다 Q 베타 버전의 기발한 변화 중 하나 Pixel 3에서 스크린 샷을 보는 방법입니다 이것은 노치가있는 첫 번째 픽셀입니다

스크린 샷에는 그 노치, 글쎄, 나는 그것이 무엇인지 모르겠다 하지만 그 노치를 피하는 유일한 방법은 귀하의 스크린 샷에서 노치를 끄는 것입니다 대신 둥근 모서리를 얻습니다

친구를 보여줄 수있는 방법 중 하나라고 생각합니다 최신 Pixel 전화가 있다는 것입니다 제 동료들과 저는 꽤 능력이 없었습니다 Q 부활절 달걀이 어디 있는지 알아 내려고 우리는 전화에 관해가는 정상적인 길을 시험해 보았다 그리고 나서 뭔가가 나타날 때까지 버전 번호를 두 드렸습니다

하지만 지금까지 우리는 같은 파이 부활절 달걀을 얻고 있습니다 그래서 뭔가를 찾으면 알려주세요 디저트 Q가 뭔지 알 수 없기 때문에 후에 이름 지어지기로되어있다 이제 이것은 베타 버전 중 하나입니다 다시 말해서 더 많은 것이 있다는 것을 의미합니다

그리고 내가 가지지 않은 많은 것들 우리가 아는 것은 Google이 확실히 준비하고 있다는 것입니다 프라이버시에 대한 통제를 강화하려면 이는 기술 분야에서 계속 커다란 주제가 될 것입니다 대체 화면을 준비 중입니다 접이식 휴대폰과 같은 폼 팩터 올해 말에 나옵니다

예를 들어 갤럭시 폴드 (Galaxy Fold)는 Q를 실행하지 않을 것입니다 그러나 그것은 Pie의 비틀어 진 버전에서 움직일 것이다 이 접는 화면을 지원합니다 Q가 제공 할 수있는 개선 사항 멀티 팩 사용과 더 나은 애니메이션 화면을 접거나 펼칠 때 사용합니다 여전히 많은 Android 기기를 알고 있어야합니다

너는 아마 지금까지 Q를 얻지 못할 것이다 작년 10 월 현재 Android 기기의 21 %만이 Oreo에 있었지만, 새 전화기를 사면 파이에 살거야 언젠가 올해 또는 픽셀을 소유하고 있습니다 우리는 매년 바뀔 희망과기도, 하지만 나중에 더 자세히 알아낼 것 같아 이번 봄에 Google I / O에서

보고 주셔서 감사 드리며 알려주세요 의견에서 Q가 아마도 의미 할 수 있다고 생각합니다 그리고 안드로이드 Q에 대한 더 많은 보도를 원하시면, thevergecom에서 우리를 확인하십시오 youtubecom/theverge에서 이와 같은 동영상을 더 좋아합니다

Drawn out: how Android renders (Google I/O ’18)

[음악 재생] 안녕하세요 우리 이야기에 오신 것을 환영합니다

"그려진 것 – Android가 UI를 렌더링하는 방법 " 그것은 거의 다른 것으로 불 렸습니다 우리는 그것을 이것을, 그리고 몇몇 행정부에서 위치가 실제로 가고 있다고 결정했다 "앱을 최적화하는 방법 Top Rendering Performance "또는 뭔가 그 얘기가 아니 었습니다

다행히도, 우리는 그것을 다시 바꿨습니다 ROMAIN GUY : 아직도 그렇지 않습니다 CHET HAASE : 대신에, 우리는 당신에게 어떻게, 사실, 물건이 작동합니다 나는 쳇 하세입니다 나는 안드로이드 툴킷 팀 출신이다

Romain Guy : 나는 Romain Guy입니다 저는 Android 프레임 워크 팀에 있습니다 나는 실시간 그래픽을한다 CHET HAASE : 그것은 오늘날 우리가 이야기하고있는 것과 같습니다 그래서 우리는 이전에이 버전의 버전을 제공했습니다

우리는 우리가 끝난 줄 알았다 그리고 나서 우리는 충분한 것들을 깨달았습니다 어쩌면 시스템 내부에서 바뀌었다 이 일을 다시하고 우리가있는 곳을 볼 시간이었습니다 이것이 우리의 시도입니다

가자 그래서 우선, 렌더링이라는 단어가 있습니다 그게 무슨 뜻이야? 일반적으로 그것을 명확히하기 위해 지방을 녹이는 것을 의미합니다 그것은 우리가 오늘 이야기 할 내용이 아닙니다 대신, 우리는 실제로 선회하는 과정에 대해 이야기하고 있습니다

버튼과 체크 상자와 같은 모든 것들 화면의 모든 것을 픽셀 단위로 사용자가 볼 수있는 그리고 많은 일들이 진행되고 있습니다 우리가하는 많은 세부 사항이 있습니다 우리는 오직 오늘부터 이것을 40 분 안에하십시오 그러나 우리는 그 길을 따라 많은 세부 정보를 덤프 할 것입니다 그래서 우선, 나는 너를 데려 갈거야

~을 통해 색깔의 무리가 될 것입니다 상단에 도트가 표시됩니다 이야기의 나머지 부분에 대한 시각적 단서의 종류 그래서 저는 일종의 걸음마 단계를 밟을 것입니다 정보의 흐름에서 일어나는 일생의 화면의 픽셀까지 내려갈 수 있습니다 우리는 안무가라고 불리는이 물건을 가지고 있습니다

보통 60 초에 한 번 찰 때, Vsync라고합니다이 간격은 다음과 같습니다 프레임이 동기화되고 있습니다 버퍼가 화면에 나타납니다 우리가 많은 정보를 처리 할 좋은 시간입니다

그 정보의 렌더링 처리 그 결과로 Vsync 연산을 얻습니다 Java SDK 영역으로 보내졌으며 우리는 UI 스레드를 사용하고 있습니다 그리고 갑자기 우리는 입력 이벤트를 처리해야합니다 속성의 변경 사항을 트리거합니다 우리는 또한 모든 애니메이션을 실행합니다

그래서 우리는 속성 값을 변경합니다 다시 말하지만, 레이아웃 및 무효화와 같은 일이 발생할 수 있습니다 우리는 전체 통과 통과를 측정합니다 그들이 얼마나 큰지 알아 내기 위해서, 그것들을 실제로 배치하는 것입니다 어디로 가야하는지, 그리고 그 다음에 그려야합니다

일단 모든 정보가 완료되면, 해당 정보의 결과를 동기화합니다 렌더링 스레드라고 불리는 것에 이르기까지 그리고 렌더링 스레드가 그것을 받아서, 좋아, 글쎄, 나는 이것들을 실행하려고합니다 나는 기본적으로 이것을 돌릴거야 모든 정보의 기본 버전으로 우리는 Java 레이어에서 제작 한 다음 GPU에서 버퍼를 얻으려고 할 때, 그래서 나는이 정보를 쓸 곳이있다

그리고 나서이 모든 GPU 명령을 실제로 발행 할 것입니다 저기있는 OpenGL 같은 것들 그리고 나서 저는 말할 것입니다 좋아요, 이제는 버퍼를 바꿀 때가되었습니다 그런 다음 GPU로 넘깁니다

그리고 그래픽 시스템은 합성이라고하는 것, 우리는 오늘이 단계의 대부분에 대해 이야기 할 것입니다 그래서 합성은 생각합니다 우리는 전에 결코 설명하지 못했습니다 그래서 우리는 약간의 세부 사항을 들어갈 것입니다 안드로이드 렌더링 아키텍처의이 부분에 대해서

그럼 작은 색 점들 화면 상단에 주목할 것입니다 우리는 몇 가지 예를 거쳐 과정을 진행하고 있으며, 우리는 이것을 더 잘 이해할 수 있습니다 예제를 말하면, 여기 간단한 예제가 있습니다 따라서 사용자가 있다고 가정 해 봅시다 사용자가 항목을 클릭하면 나는이 굉장한 RecyclerView 응용 프로그램을 썼다

그 모양이 정확히 같습니다 나는 그것이 스크린 샷이기 때문에 그것이라는 것을 안다 내 멋진 응용 프로그램에서 그것에는 아이템이 잔뜩 들어있는 RecyclerView입니다 사용자가 하나를 클릭하면이 놀라운 일이 발생합니다

그것은 배경에 임의의 색상으로 변합니다 그것은 믿을 수 없다 나는 너에게 근원을 줄 수 있었지만 나는 모른다 그것은 꽤 복잡합니다 네가 이해할 수 있을지 확신 할 수 없다

여기 내 놀라운 데모 응용 프로그램을위한 놀라운 레이아웃이 있습니다 ConstraintLayout이 있습니다 내부에 RecyclerView가 있습니다 그런 다음 런타임에 채 웁니다 그 안에는 무작위적인 물건들이 잔뜩 있어요

이 것에 대한 뷰 계층 구조 기본적으로 이렇게 보입니다 실제로, 그것은 기본적으로 이와 같이 보이지 않습니다 그것은 정확히 이것과 같습니다 그래서 당신은 DecorView에서 내려갑니다 LinearLayout과 FrameLayout이 있습니다

나는 왜 우리가 깊은 둥지를 틀고 있는지 정확히 알지 못한다 하지만 뭐든간에 역사 우리는 거기에 행동 바에 대한 것들을 잔뜩 가지고 그게 정말 중요하지 않습니다

우리가 여기서 염려하는 것은 콘텐츠 계층 구조에서 실제로 무슨 일이 일어나고 있는지, 그것이 응용 프로그램에 영향을 줄 수 있기 때문입니다 그래서 우리는 내용 FrameLayout, 우리는 ConstraintLayout을 가지고있다 바깥쪽에는 RecyclerView를 감 쌉니다 그리고 나서 모든 항목 구체적으로 이들은 다음과 같은 항목입니다

그것들은 유일한 것들이기 때문에 화면에 있습니다 실제로 측정되고 배치되고 그려집니다 그래서 어떻게됩니까? 이 예제를 실행하고 우리가 처음부터 끝까지 간 모든 흐름을 통해 사용자가 클릭하면 Vsync 작업이 실행됩니다 그것이 전송되고 입력 단계에서 입력을 처리합니다 우리는 이것이 클릭이라는 것을 알게됩니다

나는 여기에 몇 가지 세부 사항에 광택을 쓰고있다 사실, 우리는 먼저 다운이 있다는 것을 알아 차릴 것입니다 그런 다음 위로 올라간 다음에 클릭으로 처리됩니다 우리가 결국은 당연한 것으로 받아 들여 여기를 클릭하여 처리 할 것입니다

이 항목에서 클릭 끝나는 방법 내가 가지고있는 놀랍도록 복잡한 예에서, 그 안에 배경색을 설정합니다 이 항목에 임의의 색상을 지정하십시오 그것이 내가이 방법을 무작위로 호출 한 이유입니다 viewjava에서 설정된 배경색으로 전송됩니다

배경에 색상을 설정하는 물건을 잔뜩합니다 drawable, 그리고 나서 결국 호출 이 메소드는 invalidate라고 불린다 무효화는 프로세스입니다 실제로 뷰를 다시 그리지는 않습니다 View Hierarchy에 무엇인가를 알려주는 과정입니다

다시 그려야합니다 그래서 클릭이 발생합니다 그것은 아래쪽에있는 항목에서 발생합니다 그 두 번째 아이템 – 당신은 녹색으로 둘러싸인 것을 보았습니다 우리는 약간의 무효화 메소드가 있습니다

그걸 부름 받았고 기본적으로 나무 위로 걸어 간다 나무 위로 줄곧 일련의 메소드를 호출합니다 뷰는 다시 그려야한다는 것을 알고 있기 때문에, 하지만 실제로 그 정보를 전파해야합니다 계급을 따라 올라간다 그래서 그때 우리는 앞으로 모든 것을 다시 그릴 수 있습니다

그래서 무효 심판을 계층 구조의 맨 위로 불러옵니다 결국 그것은 거대한 수업으로 끝납니다 우리가 ViewRootImpljava를 호출했다고하자 거기에이 무효화 자식 메소드가 있습니다

그리고 그것은 기본적으로 좋아, 나는 순회 일정을 잡아야한다 알았어, 누군가 정보를 가져 왔어 어딘가에서 무효화 됐어 즉 나중에 트래버스 코드를 실행해야합니다 이 과정이 끝나면 순회는 일을하는 과정입니다

실제로 필요한 모든 단계 해당 프레임을 렌더링합니다 구체적으로 말하자면, 보기가 얼마나 큰지, 레이아웃 – 뷰의 위치와 크기를 설정하고 뷰를 그립니다 이 모든 것을 순회라고합니다 그래서 우리는 순회를 계획했습니다 그것은 나중에 일어날 것입니다

그리고 나중에 시간이 지금이다 그래서 같은 프레임에서 우리는 traversal 코드로 끝납니다 이 performTraversals 메소드에서 그것은 PerformDraw를 할 것입니다 PerformDraw는 무승부를 요구합니다

메소드를 핵심 뷰에 추가하면됩니다 모든 방법으로 전파됩니다 그리기 방법은 실제로 최적화에서 끝납니다 허니 콤에서 다시 구현 한 Get DisplayList를 호출합니다 따라서 DisplayList는 렌더링을 저장하는 구조입니다 정보? 버튼 코드의 작성 방법을 보면 또는 일반적으로 코드보기, 그래픽 명령 호출 DrawBackgrounds, DrawDrawable, DrawLine, 도대체 무엇이

그러나 이것들은 DisplayList의 연산으로 끝납니다 이는 이러한 작업을 나타내는 간결한 방법이며, 뿐만 아니라 작업에 대한 매개 변수도 제공합니다 그래서 Get DisplayList를 호출합니다 사실 장식보기는 변경되지 않았습니다 그래서, 글쎄요, 저는 변하지 않았습니다

하지만 확실히 내 아이를위한 DisplayList를 얻을 수 있습니다 그리고 나무 아래로 내려 가면서, 그것이 항목 2에 도착할 때까지, 그리고 그것은 말합니다, 오, 나는 변했습니다 무효가 나를 불렀을 때, 뭔가를 유발해서 내가 다시 새겨 져야한다는 것을 알았습니다 그래서 Get DisplayList 실제로 끝납니다 뷰를 그리는 호출로서 재생성됩니다

자체 디스플레이 목록 자 이제이 onDraw 메서드로 끝납니다 DisplayList에있는 작업으로 끝납니다 DisplayList는이 항목에 대해 기본적으로 rect 정보와 텍스트 정보 – 꽤 기초적인 그리고 기본적으로 DisplayList가 있습니다

전체 계층 구조 그래서 그 자체가보기 자체가 아니 었습니다 하지만 우리는 계층 구조 자체를 가지고 있습니다 이 표시 목록의 계층 구조에서 재생됩니다 줄곧

이제 전체 트리에 대한 DisplayList가 있습니다 그게 우리가 UI 스레드에서해야 할 모든 것입니다 이제 우리는 그 정보를 렌더링 스레드 및 렌더링 스레드 GPU를 실제로 다루는 별도의 스레드입니다 이 작업의 측면 Java 측에서는 모든 정보를 생성했습니다

네이티브 측에서, 우리는 실제로 – 우리는 그 정보를 가지고 GPU로 동기화합니다 동기화 작업이 있습니다 기본적으로 우리는 저기서 핸들을 복사 해 또한 관련 정보를 일부 복사합니다 피해 지역을 복사 했으니 까

그 아이템 2 – 그게 중요하다는 걸 아는 것이 중요합니다 그 틀에서 변한 유일한 것 우리가 아무것도 다시 그릴 필요가 없다는 것을 의미한다 그렇지 않으면 그 지역 밖 그래서 우리는 클립 바운드를 복사 할 것입니다

그래서 우리는 다시 그려야 할 것을 알고 있습니다 이제 최적화를 수행 할 것입니다 비트 맵 업로드 같은 것들 따라서 이것은 프레임의 시작 부분에서 그것을 수행하기에 좋은 시간입니다 그들에게 실제로 그들을 돌려 줄 시간을주세요

길을 따라 텍스처에, 우리는 다른 것들을하고있어 ROMAIN GUY : 여기에 우리가 업로드 중임을 언급합니다 하드웨어가 아닌 비트 맵 하드웨어 비트 맵은 새로운 유형의 비트 맵 구성입니다 Android O에 추가되었습니다 일반적으로, 비트 맵을 가지고있을 때 메모리를 할당해야합니다

자바 측에서 그리고 그릴 시간이 왔을 때, 우리는 GPU에서 비트 맵 복사본을 만들어야합니다 이것은 비싸다 시간이 걸리며 사용하는 RAM의 양이 두 배로 늘어납니다 따라서 Oreo에서 사용 가능한 하드웨어 비트 맵을 사용하면, 당신은 방정식의 Java 측을 유지할 수 있습니다

GPU에만있는 비트 맵을 가질 수 있습니다 따라서이 비트 맵을 다시 수정하지 않을 경우, 이것은 메모리 효율적인 현명한 효율적인 방법입니다 비트 맵의 ​​메모리를 저장합니다 CHET HAASE : 이전에 렌더링 스레드에 대해 언급했습니다 이것은 우리가 롤리팝에서 소개 한 것입니다

해제 GPU 와만 통신하는 별도의 스레드입니다 그것은 네이티브 코드입니다 Java 코드 외부에는 호출이 없습니다 애플리케이션 코드에는 분명히 콜 아웃이 없다

그냥 GPU와 대화합니다 우리는 이것을했습니다 그래서 우리는 여전히 기본적으로해야합니다 우리가했던 것과 같은 일, 미리 렌더링 된 쓰레드, 우리는 모든 DisplayList 정보를 생성합니까? 그 다음 DisplayList 정보를 보냅니다 GPU에

그래서 일련의 직렬하지만 렌더 스레드 원형처럼 물건을 원자 적으로 할 수있다 리플 애니메이션뿐만 아니라 애니메이션도 보여줍니다 벡터 드로어 블 애니메이션으로서 – 렌더링 스레드에서 원자 적으로 발생할 수 있습니다 그래서 일어날 수있는 일 UI 스레드를 정지시키지 않아도됩니다 그리고 그 동안 UI 스레드 유휴 상태 일 때 다른 일을 할 수 있습니다

동기화 후, 유휴 프리 페치 중 일부 작년에 한 RecyclerView에서 일합니다 따라서 스레드가 실행됩니다 우리는 모든 것을 동기화했습니다 우리는 DisplayList를 가지고 있습니다, 피해 지역이 있습니다, DisplayList를 무언가로 바꿉니다 우리가 DLOps라고 부르는 것 – 표시 목록 조작

따라서 중간에 채우기 작업이 있음을 알 수 있습니다 그것이 우리가 녹색으로 변한 것입니다 그런 다음 우리는 우리가 수행하는 최적화가 있습니다 ROMAIN GUY : 여기서 우리는 다양한 최적화 작업을 수행합니다 그래서 예를 들어, 알파 렌더링을한다면 뷰에 Set Alpha를 호출하거나 하드웨어를 설정 한 경우 레이어를 선택하면 그리기 명령을 식별하려고합니다

해당 레이어를 대상으로해야하는 프레임의 시작 부분에서 이동시킵니다 이렇게하면 GPU 내부의 상태 변화를 피할 수 있습니다 매우 비쌉니다 따라서 이런 종류의 최적화를 수행하지 않고, 당신은 끔찍하고 끔찍한 성적을 보게 될 것입니다 GPU 자체가 느려지 기 때문이 아닙니다

GPU가 CPU를 기다리고있을뿐입니다 그것을 지시하기 위해 우리가하고있는 다른 하나, 우리는 당신에게 실제적인 실제적인 예를 보여주기 위해, 재정렬 및 ​​매칭이라고합니다 우리는 모든 작업을 살펴보고, 우리가 목록 항목을 가지고 있기 때문에이 예제에서 볼 수 있습니다 우리는 유사한 많은 작업을 인터리빙합니다

그래서 우리는 직사각형을 그릴 것입니다 그리고 나서 텍스트를 그릴거야 그런 다음 사각형과 텍스트를 다시 그릴 것입니다 그리고 다시 여기에서 우리는 GPU의 상태를 바꾸고 있습니다 여러 번, 대신에 우리는 명령어가 겹치지 않으면 할 수있다

우리는 모든 직사각형을 함께 그릴 수 있습니다 그리고 나서 우리는 모든 텍스트를 함께 그릴 수 있습니다 이것은 재정렬과 매칭의 일부입니다 그리고 때때로, 우리가하는 일은 우리가 말하길, 우리가 사용하는 많은 텍스트를 볼 수 있다면 동일한 색깔 및 동일한 글꼴, 다른 텍스트 불러 오기가 필요하지 않습니다 그것들은 전체 화면을 커버하는 단 하나의 것일 수 있습니다 CHET HAASE : 원본 DLOps를 볼 수 있습니다 채우기 작업을 한 다음 어떤 텍스트를 그리기를 원한다

텍스처 맵이 될 것입니다 글리프 캐시에서 복사합니다 그런 다음 채우기 작업이 있고 그 다음에 더 많은 텍스트와 채우기 그래서 우리는 이러한 모든 작업을 인터리브했습니다 따라서 재정렬 작업 후에, 그러면 좀 더 보입니다

일련의 채우기와 일련의 텍스트 작업이 있습니다 함께 배치 할 수도 있습니다 더 최적이 될 것입니다, 우리는 여기서 볼 것입니다 ROMAIN GUY : Gmail의 예입니다 그래서 그것은 허니 콤 시대에있었습니다

여기서 어떻게 파이프 라인을 수정했는지 알 수 있습니다 렌더링 속도를 늦추고 볼 수 있습니다 Gmail이 그리는 방법을 정확하게 설명합니다 그래서 우리는 많은 목록 항목을 가지고 있습니다 그것들을 정확한 순서대로 그려라

뷰 계층 구조에 코드 순서대로 존재해야합니다 사실은 캔버스에 그린 모든 그리기 호출은 그 명령을 존중해라 불행히도, 내가 말했듯이, 그것은 매우 비효율적입니다 대신에 일괄 처리 및 병합 및 재정렬 한 후, 우리는 이것을 얻는다

특히 모든 별들이 같은 시간에 그려지며, 대부분의 텍스트가 한꺼번에 나타납니다 흥미로운 점은 모든 목록을 그리는 것입니다 항목 배경이 차례로 나타납니다 그래서 좋았어 재정렬이 효과가있었습니다

일괄 처리가 작동하지 않았고 부분적으로 목록이 항목이 약간 겹쳐 있습니다 명령이 겹칠 때 우리는 명령을 하나로 그려야합니다 블렌딩을 존중할 다른 후, 알파 값이 올바른지 확인하십시오 따라서 효과는 실제로 응용 프로그램에 따라 다릅니다 KitKat에서 올바르게 기억한다면, 설정 응용 프로그램은 전체 화면을 그릴 수있었습니다

수십, 수십 개가 아닌 약 6 회의 무승부 요청으로, 뷰 계층 구조에서 볼 수 있습니다 따라서 이것은 우리에게 매우 중요한 최적화입니다 CHET HAASE : 나는 현재의 장치들에 대한이 작업을 생각한다 밀리 초와 같은 것을 저장했다 우리가 가진 것을 깨닫지 못한다면 16 세 안에 모든 것을 할 수 있습니다

그래서 실제로 큰 발전이었습니다 Gmail 덕분에 Gmail이 덜 복잡해질 수있었습니다 종종 다음 프레임으로 밀려 나왔다 그래서 모든 것에 대한 우리의 설명으로 되돌아갑니다 그런 다음 clipReject가 있습니다

그래서 이것은 우리가 피해에 대한 정보를 얻는 곳입니다 지역? 그래서 우리는 두 번째 항목이 화면에 있었는지 알고 있습니다 우리는 우리가 그릴 필요가 없다는 것을 안다 그 밖에는 아무것도 없어 따라서 우리는이 DLOps를 처리하면서, 우리는 기본적으로 버릴 수 있다는 것을 압니다

그 지역 밖에서 그려지고있는 모든 것 그래픽에서는 사소한 불량이라고합니다 따라서 우리는 모든 DLOps를 사소하게 거부합니다 그 지역과 교차하지 않은 이제 우리가해야 할 일은 채우기를 그리는 것뿐입니다 그리고 일부 텍스트와 라인

그래서 우리는 그렇게합니다 이를 수행하는 과정에서 우리는 GetBuffer를 수행 할 수 있습니다 이것은 대개 암시 적 작업입니다 우리는 완충을 요구하지 않는다 GPU 작업을 시작하자 마자, 그러면 GPU가 우리에게 버퍼를 넘깁니다

특히, SurfaceFlinger가 우리에게 버퍼를 건네줍니다 우리는이 명령들을 넣을 수 있습니다 그런 다음 명령을 실행합니다 이것은 일련의 GL 명령입니다 슬라이드에서 볼 수 있듯이 glCommand라고합니다

기본적으로 우리가 무엇을 필요로하는지에 상응합니다 채우기 또는 텍스트 수행하기 – 비트 맵은 줄을 복사합니다 그리고 우리는 버퍼를 교환합니다 그래서 이것은 우리가 말하고있는 것입니다, 우리는 우리의 모든 렌더링 작업 이 프레임을 화면에 표시 할 준비가되었습니다

SurfaceFlinger가 버퍼를 교환하라는 요청입니다 기본적으로, 우리는 버퍼로 드로잉을 마쳤습니다 앞면에있는 것과 이것을 바꿀 수 있습니다 그것을 화면에 표시합니다 한편, SurfaceFlinger에서 우리는 Romain이 가고있는 합성 단계가있다

나중에 많이 이야기하기 하지만 기본적으로 화면의 모든 창을 차지합니다 탐색 막대, 상태 표시 줄, 응용 프로그램의 실제 내용 창 그것은 하드웨어 컴포 지터에있는 모든 것을 결합합니다 그들을 화면에 놓은 다음, 타다 끝났어

그래서 정말 간단한 예였습니다 매우 복잡한 예를 살펴 보겠습니다 이것은 두 단계로 진행될 것입니다 하나, 그래서 우리는 목록을 끌어 올거야 그래서 우리는 그것을 끌고 갈 것입니다, 그리고 우리가 그것을 끌고 갈 때, 우리는 항목을 조금씩 옮길 것입니다

그리고 결국 우리가 계속 움직이면, 우리는 새로운 아이템을 나타낼 것입니다 그래서 우리는이 두 가지 버전을 살펴볼 것입니다 이동 전용 버전이 있습니다 그래서 우리가 그것을 끌어 올릴 때, 새로운 아이템 – 새 항목이 표시되지 않습니다 모든 것이 조금 바뀌 었습니다

우선 우선 처리해야합니다 그래서 우리는 Vsync를 가지고 있습니다 입력 이벤트를 처리 할 시간입니다 그래서 우리는 그렇게하고, 우리는 이런 식으로 끝납니다 RecyclerView의 터치 이벤트에서 잘, 아래 가동이 있었다는 것을 밝힌다

그리고 등록 만하면됩니다 그 일이 일어난 곳 아무것도 처리 할 필요가 없습니다 화면에서 아무 것도 바뀌지 않았습니다 우리는 방금 사용자가 실제로 눌렀다는 것을 등록했습니다

그래서 우리는 그것을 나중에 기록하고 아무런 작전도 없습니다 우리는 우리가 얘기 한 나머지 것들은하지 않습니다 아무것도 바뀌지 않았기 때문에 그들은 드래그를 계속하고 유사한 코드로 끝납니다 그래서 우리는 다음 프레임에서 입력을 처리합니다

우리는 터치 이벤트에서 OK라고 말합니다 오, 이제 우리는 그들이 실제로 움직 였다는 것을 알고 있습니다 우리는 이전 X를 저장했기 때문에 그들이 얼마나 많이 움직 였는지 압니다 우리는 델타를 계산합니다 그리고 이제 우리는 offset top와 bottom이라고 불리는 것을 호출합니다

기본적으로 화면의 모든보기에 대해 우리는 단순히 Y로 그들을 이동합니다 그리고 위쪽과 아래쪽 호출 오프셋 무언가 무효화 방법입니다, 하지만 약간 다릅니다

그것은, invalidateViewProperty 말한다 이것은 우리가 두는 최적화입니다 아마 허니 콤 두 번째 릴리스 또는 무언가 DisplayList 속성 그래서 이전에 DisplayList에 대해 이야기했을 때, 내가 빠뜨린 하나의 뉘앙스가있었습니다 우리는 운영에 관한 정보를 가지고 있습니다 그리고 그래픽 작업을위한 매개 변수

하지만 일부 핵심 디스플레이에 대한 정보도 있습니다 기본적으로 뷰의 속성 인 속성, 번역 속성과 마찬가지로 회전 알파 그리고 이것들은 우리가 필요로하지 않는 속성입니다 변경하려는보기를 다시 렌더링합니다 우리는 단순히 DisplayList 구조 자체에서 그것들을 변경할 수 있습니다

그런 다음 GPU 발행시에 선택됩니다 따라서 우리가 그렇게하는 것이 매우 빠릅니다 따라서보기를 무효화하는 대신 그 모든 것을 모두 다시 그리는 것 우리가하는 말은 번역을 바꾸는 것입니다 이보기의 속성 그래서 우리는 invalidateViewProperty를 호출합니다 그것은 나무 위로 모든 길을 전파합니다

우리는 여전히 최상위 계층에서 어떤 일이 발생 하는지를 알아야하기 때문에, 하지만 훨씬 더 최적의 단계입니다 이렇게되면 일정이 정해진 다 Traversals, 이전처럼 추첨에서, 그것은 performTraversals에서 끝나고, PerformDraw는 이보다 훨씬 간단한 버전을 수행 할 수 있습니다 DisplayList가 실제로 변경되지 않았기 때문입니다

DisplayList 속성을 변경하면됩니다 그것의 내부 그래서 우리는 즉시 그 정보를 렌더링 스레드로 그런 다음이를 실행하여 DisplayList 연산으로 변환 할 수 있습니다 버퍼를 얻는다

기본적으로 모든 것은 이전과 같습니다 두 번째 단계로 가자 그 복잡한 복잡한 예입니다 사용자는 드래그를 계속하고, 드래그 할 때, 하단에 새 항목이 나타납니다 따라서 Vsync는 입력을 처리합니다

우리는 이와 같은 방법으로 끝납니다 우리는 그들이 움직 였다는 것을 압니다 오,하지만 그건 우리가 창조를 촉발시킬 필요가 있음을 의미합니다 그리고 거기에 새 항목의 바인딩 결국이 코드에서 끝납니다

상위 뷰를 추가하십시오 그래서 RecyclerView는 새로운 시각을 갖게 될 것입니다 RequestLayout을 호출 할 것입니다 그래서 RequestLayout은 일종의 무효화입니다 그러나 말하는 대신에, 나는 다시 그려야한다

그것은, 내가 다시 측정하고 relaid 필요가 말합니다 그리고 그것은 모든 사람들에게 영향을 미칠 수 있습니다 그래서 우리는 기본적으로 RequestLayout을 모든 방법으로 전달합니다 무효처럼 나무를 올리십시오 그런 다음 전체 트리에서 측정 및 레이아웃을 수행합니다

거기서 무엇이 바뀌 었는지 보러 그래서 RequestLayout은 부모에서 일어나고, 그리고 그 모든 것이 전파됩니다 그리고 그것은 다시 일정에 잡 힙니다 여행자, 우리 친구 그런 다음 트래버스를 수행하십시오

지금 그릴 물건에 대해 우리는 performMeasure를 할 것입니다 및 performLayout 측정은 기본적으로 모든 의견을 묻습니다 그들이 얼마나 큰 지 알고 싶습니다

그것은 요청입니다 레이아웃이 말하길, 이것은 당신이 얼마나 커질 지에 대한 것입니다 그리고 이것은 당신이 위치 할 곳입니다 그것은 견해와 모든 부모 사이의 협상이다 시스템의 모든 제약 조건에 따라 그래서 우리는 수행을 수행합니다

그것은 기본적으로 측정을 상단에서 호출합니다 그 모든 것이 아래로 전파됩니다 그리고 우리는 모든 정보를 가지고 있습니다 모든 견해가 얼마나 커지고 싶어하는지, 그게 우리가 레이아웃을 계산하기에 충분하다 정보

그런 다음 레이아웃을 트리 전체로 전파합니다 그리고 그 일이 아이템과 부모에게 일어나면 변경된 다음, 실제로 그 항목을 배치합니다 우리는 갈 준비가되어 있습니다 이제 우리는 실제로 물건을 그릴 수 있습니다 모든 것은 이전과 같습니다

여기서 뉘앙스는 단지 레이아웃면이었습니다 중요한 뉘앙스를 제외하고는 우리 모두가 이 RequestLayout과 측정 및 레이아웃에 대한 정보 이 RecyclerView 상황 그러나 RecyclerView는이를 최적화합니다 부모와 자녀에 대해 충분히 알고 있습니다 실제로는 뷰를 상쇄 할 수 있습니다

RequestLayout을하는 대신, 실제로는보기를 이동시킬 수 있습니다 새 항목을 만듭니다 따라서 RecyclerView, 이전 목록보기뿐 아니라 ROMAIN GUY : 이제 우리는 이야기 할 것입니다 우리의 윈도우 컴포지션 인 SurfaceFlinger가, 화면의 모든 창을 합성합니다 이것은 흥미 롭습니다

음, 우선, 뭔가를 배우는 것이 항상 재미 있기 때문입니다 새로운 기술에 대해서뿐만 아니라 이해할 수 있기 때문에 어떤 개념 뒤에 일부 개념 Surface API, SurfaceTexture API, SurfaceView 또는 MediaCodec 그래서 우리가 구성을 이해하기 전에, 우리는 안드로이드에 대한 매우 중요한 개념을 이해해야합니다 버퍼 큐를 호출했다 따라서 이름에서 알 수 있듯이 버퍼 대기열은 우리의 그래픽 버퍼가있는 버퍼 큐에 불과합니다

일반적으로 1 ~ 3 개의 버퍼가 있습니다 내부적으로 다양한 옵션이 있습니다 여기서 우리가 버퍼 큐를 설정할 때, 우리가 원하는 버퍼 수를 요청할 수 있습니다 그리고 매우 중요하게도 버퍼 큐는 두 개의 끝점을 가지고 있습니다 우리에게는 생산자가 있고 우리에게는 소비자가 있습니다

따라서 일반적으로 버퍼 대기열을 사용하는 방법 – 생성자는 dequeueBuffer라는 메서드를 호출합니다 대기열에 있습니다 대기열에서 버퍼를 가져옵니다 이제는 그것을 소유하고 있습니다 그것은 모든 종류의 렌더링을 할 수 있습니다

이것은 픽셀 데이터를 직접 전송할 수 있으며, 그것은 OpenGL을 사용할 수 있습니다, 그것은 캔버스를 사용할 수 있습니다 별로 중요하지 않습니다 OpenGL을 사용하면 기본적으로 마지막에 썰매 버퍼를 호출하면 어떻게됩니까? 그 때 우리는 버퍼 안에 내용을 생성합니다 따라서 제작자가 컨텐트를 제작할 때, 그것은 큐 버퍼를 호출하고, 버퍼에 다시 준다 버퍼 큐에 저장한다

이제 소비자는 다음 버퍼를 잡을 수 있습니다 acquire를 사용하여 대기열에 있습니다 그래서 그것은 획득 버퍼를 호출합니다 큐 내의 최초로 이용 가능한 버퍼 그것은 그것과 관련이있는 것은 무엇이든합니다

그리고 그것이 끝나면, 그것은 release를 호출함으로써 그것을 되돌립니다 그래서 아주 간단한 개념입니다 물론 코드를 보면 모든 헤더 파일과 모든 코드 복잡하다 부분적으로 복잡하다 버퍼 큐의 두 끝점 다른 프로세스에서 살 수 있습니다

그리고 이것은 정확하게 일어납니다 이것은 우리의 곡면 작곡가가 작동하는 방식입니다 따라서 시스템에 창을 만들 때, Window Manager가 있고 SurfaceFlinger가 있습니다 따라서 창 관리자는 효율적입니다 이 시나리오의 제작자 및 SurfaceFlinger 우리의 소비자입니다

그래서 addView에서 Window Manager를 호출하면 – 이 작업은 자동으로 수행됩니다 당신은 토스트를 만들 때 대화를 만들고, 나는 믿습니다 활동을 만들 때 – 내부적으로 우리는 윈도우 객체를 생성한다 이 윈도우 객체는 SurfaceFlinger면에 형제가 있습니다 레이어라고합니다

이름은 조금 혼란 스러울 수 있습니다 그래픽에서는 버퍼와 대기열을 처리해야하기 때문에, 그것이 우리 모두가하는 일이며 우리는 빨리 이름이 없어집니다 그리고 그래픽 팀 – 그게 우리가 생각한 이유야 표면 및 표면 텍스처와 버퍼 큐 및 레이어 및 창 네

그래서 좀 지저분 해 그래서 SurfaceFlinger에 하나의 레이어가 있습니다 그것은 기본적으로 창입니다 레이어가 시스템의 구성 요소입니다 이는 응용 프로그램에 대한 버퍼 대기열을 생성하고 소유합니다

그래서 그것은 버퍼 큐를 생성하고 우리는 애플리케이션에 엔드 포인트를 보내는 방법이있다 서페이스를 만듭니다 따라서 API 중 하나에서 Surface를 볼 때마다 당신은 정말로 버퍼 큐의 프로듀서 끝 점이 있습니다 귀하의 프로세스에서 시스템의 다른 어딘가에 살고있는 또는 일부 다른 프로세스에서 대부분의 시간은 SurfaceFlinger 내부에있게 될 것입니다

이제는 전형적인 유스 케이스로, 애플리케이션 개발자로서 Surface API를 다루려고한다 SurfaceView를 만들 때 따라서 SurfaceView가 작동하는 방식은 자체 표면 인 창입니다 우리가 여기에서 볼 수 있습니다 그럼 우리는 그 표면을 통해 구멍을 효과적으로 잘라 냈습니다

그리고 창 관리자와 SurfaceFlinger에게 물어 봅니다 두 번째 서페이스를 만듭니다 그리고 우리는 그것을 밑으로 밀어 넣습니다 그것들이 같은 창문의 일부인 척하십시오 그러나 그들은 그렇지 않습니다

그것들은 두 개의 다른 표면입니다 그들은 두 개의 서로 다른 버퍼 큐를 가지고 있는데, 그들은 서로 완전히 독립적 일 수 있습니다 따라서 SurfaceView를 사용하면 아마도 OpenGL이나 Vulcan이나 미디어 플레이어를 사용할 것입니다 콘텐츠를 생성합니다 예를 들어,이 경우 OpenGL ES가 있습니다

짐을 뽑아 버릴거야 그것은 약간의 렌더링을 할 것입니다 버퍼를 Surface로 대기열에 넣고, 따라서 버퍼 큐에 저장됩니다 표면 질감을 사용하면 소비자가 OpenGL이됩니다 그래서 텍스쳐 ID를줌으로써 SurfaceTexture를 만듭니다

이 경우 SurfaceTexture가 생성하고 소유합니다 버퍼 큐, 그래서 종종 자신의 프로세스에있을 것입니다 그런 다음 SurfaceTexture를 전달해야합니다 어떤 제작자에게, 그리고 이것을하기 위해, 자신이 엔드 포인트를 작성하고, 서페이스를 만듭니다 SurfaceTexture를 취하는 Surface의 생성자가 있습니다

그래서 당신은 당신의 서피스를 만들고 그것을 보냅니다 다른 응용 프로그램으로 이동 한 다음 OpenGL 코드를 렌더링 할 준비가되면, 그것은 acquire를 호출하여 버퍼 큐에서 버퍼를 가져옵니다 렌더링을 수행합니다 다른 큐의 내부에 버퍼를 생성합니다 완료되면 릴리스를 호출 할 수 있습니다

TextureView는 UI 툴킷의 일부인 위젯입니다 SurfaceTexture의 혜택을 누릴 수 있습니다 이 특별한 경우 렌더링 스레드 우리가 얘기 한 것은 SurfaceTexture의 소비자입니다 당신은 여전히 ​​Surface를 얻는 책임이 있습니다 TextureView에서 그것을주고 당신이 선택한 프로듀서에게

당신은 그것을 멋진 이미지라고 생각할 수 있습니다 정말 효율적으로 업데이트 할 수있는 이미지보기입니다 하드웨어 가속을 사용합니다 최근 몇 년 동안 우리는 당신에게 말 했었습니다 TextureView가 해결책이었습니다

SurfaceView의, 비디오 또는 OpenGL을 통합하고자 할 때 복잡한 응용 프로그램 내에서 렌더링 예를 들어, ListView 또는 CountView 또는 움직이는 모든 것 SurfaceView는 두 개의 다른 창으로 구성되어 있기 때문에, 자연적으로 그렇게 효율적이었습니다 렌더링과 동기화되지 않았습니다 자신의 응용 프로그램의

이 문제는 Android 최신 버전에서 수정되었습니다 그래서 대부분의 시간, 안드로이드의 최신 버전에서, TextureView 대신 SurfaceView를 사용해야합니다 필요한 경우에만 TextureView를 사용하십시오 어쩌면 당신의 다른 견해들 사이에 끼어 있을지도 모릅니다 또는 SurfaceView에서 지원하지 않는 애니메이션을 사용하십시오

CHET HAASE : O 릴리스라고 생각합니다 그건 O– 어쩌면 N 이네 어쩌면 ROMAIN GUY : 둘 중 하나 테스트를해야합니다

CHET HAASE : 우리가 최근에 말한 이유입니다 ROMAIN GUY : 그리고 여기에 다른 제작자들의리스트가 있습니다 및 플랫폼의 소비자 그래서 우리는 SurfaceView와 SurfaceTexture를 보았습니다 OpenGL ES는 제작자입니다

또한 소비자 일 수도 있습니다 Chet가 그 라이프 사이클에서 어떤 시점에서, 우리는 버퍼를 얻는다 렌더링에서 dequeueBuffer를 호출 할 때입니다 thread로 보내고, 이것은 일반적으로, 우리가 첫 무승부를 할 때 마지막에는 eglSwapBuffer를 호출 할 때 운전자에게 우리가 우리의 프레임을 다 끝냈다는 것을 알리기 위해, 실제로 프레임을 생성합니다

다시 버퍼 큐에 넣으십시오 Vulcan, MediaPlayer, 및 MediaCodec 그리고 우리는 플랫폼 전반에 걸쳐 훨씬 더 많은 것을 가지고 있습니다 자, 실제 작곡 그래서 우리는 여러 창을 만들었습니다

각각 자신의 레이어가 있습니다 SurfaceFlinger는 모든 레이어에 대해 알고 있으며, 그리고 SurfaceFlinger는 실제로 디스플레이와 대화하기 위해 하드웨어 작곡가 (Hardware Composer)라고 불리는 것에 대해 이야기합니다 하드웨어 합성기는 하드웨어 추상화 레이어입니다 우리가 GPU 사용을 피하기 위해 사용하기 때문에 화면에 모든 창을 합성해야합니다 이유 중 하나는 배터리를 절약하는 것입니다

그렇게 효율적으로 전력을 소비합니다 하지만 응용 프로그램에 액세스 권한이 있는지 확인해야합니다 기본적으로 GPU의 모든 기능에 적용됩니다 우리는 당신을 멀리하지 않습니다 그리고 과거에는 들었을 수도 있습니다

창 수를 제한해야한다고 당신이 화면에 넣어 그리고 당신은 왜 몇 슬라이드에서 볼 수 있습니다 그래서 우리는 하드웨어 작곡가가 있습니다 효과적으로 하드웨어 블록입니다 멀티플 비트 맵을 사용하면 정말 빠릅니다

화면에서 함께 구성 할 수 있습니다 그리고 우리는 방금 이것에 대해 이야기했습니다 그래서 실제로 작동하는 방법 – 하드웨어 작곡가 정말 일종의 프로토콜입니다 여기에서는 이전 Hardware Composer에 대해 설명하겠습니다 하드웨어 작곡가 1 또는 하드웨어 작곡가 0이라고합니다

나는 항상 혼란 스럽다 우리는 Hardware Composer 2라는 것을 사용합니다 하지만 훨씬 더 복잡해 그래서 나는 그렇지 않다 여기에서 설명 할 것입니다 그러나 그것의 요지는 기본적으로 같은 방식으로 작동합니다

그래서 SurfaceFlinger는 많은 레이어를 가지고 있습니다 하드웨어 작곡가에서 준비를 할 것입니다 그리고 더 오래된 레이어를 Hardware Composer로 보냅니다 모든 계층에서 무엇을하고 싶은지 알려달라고 요청하십시오 모든 하드웨어 합성기는 독점적 인 조각입니다 사용중인 휴대 전화 또는 태블릿의 하드웨어 정보 우리가 쓸 수있는 방법이 없습니다

모든 다른 하드웨어 작곡가를위한 드라이버 저 밖에 그래서 대신, 하드웨어 작곡가의 그가하고 싶은 것을 우리에게 말해 줄 것입니다 따라서이 경우에는 레이어가 있습니다 하드웨어 작성자가 오버레이로 답장합니다 즉, 하드웨어 작성자가 픽셀 형식을 이해하고 있음을 의미합니다

그 창에 대해 그것을 처리 할 수 ​​있다고 알려줍니다 그리고 그 창문을 위해 작곡을 할 것입니다 그래서 우리는 계속 간다 두 번째 레이어에 오버레이가 표시됩니다 세 번째 레이어를 오버레이한다고 말하고 있습니다

그래서 훌륭합니다 즉, 모든 구성을 자동으로 수행 할 수 있습니다 우리를 대신하여 매우 효율적인 방법으로 이제 우리 지도자들은 모두 오버레이와 일치합니다 우리는 세트라고 부른다 이번에는 모든 레이어를 하드웨어 작곡가에게 보냅니다

실제 작곡을 위해, 그리고 하드웨어 작곡가 모든 것을 화면에 보냅니다 이제는 더 복잡한 예입니다 그래서 우리는 많은 수의 레이어를 가지고 있습니다 우리는 준비라고 부릅니다 처음에는 모든 것이 잘됩니다

하드웨어 작곡가는 오버레이라고 말합니다 그것은 그것을 처리 할 수 ​​있습니다 그러나 어떤 이유로, 다음 하나를 위해, 그것은 말한다, 프레임 버퍼 이렇게하면 픽셀 형식을 사용하는 경우에 발생할 수 있습니다 지원되는 것일 수도 있습니다

회전을 사용하여, 그리고 하드웨어 작곡가 알지 못한다 회전을 처리하는 방법 또는 화면에 너무 많은 레이어 또는 여러 가지 이유 그 하드웨어 작곡가에 특유한 것입니다 CHASE HAASE : 이것은 기기에서 훨씬 더 보편적이었습니다 아마 3 년에서 4 년 또는 그보다 더 오래 전에 그래, 맞아

우리는 약 4 개의 하드웨어 레이어를 사용했습니다 네가 사용할 수있는 네 명이야 5 점입니다 네 명이야 그래서 우리는 4 개를 가지고 있었고, Pixel 2에는, 너무 많은 세부 사항으로 들어가기없이, 당신은 기본적으로 7을 가지고 있습니다

그래서 예전보다 훨씬 나아졌습니다 그러나 Pixel 2 XL을 사용하는 경우 두 개의 레이어를 사용합니다 둥근 모서리를 그립니다 그래서 당신은 실제로 7이 없습니다 너는 5 명이있다

실제로 병합 될 수 있기 때문에 실제로 6 개입니다 하드웨어 작곡가 어쨌든, 많은 세부 사항은 정말 복잡 할 수 있습니다 모든 세부 사항을 알 필요는 없습니다 어쨌든이 경우 우리는 하나의 레이어를 가지고 있습니다

하드웨어 작곡가로 바로 갈 수 있습니다 프레임 버퍼로 표시된 두 개의 레이어가 있습니다 그리고 그것이 우리를 위해 어려운 부분이 시작되는 곳입니다 하드웨어에서 처리하지 않는 레이어가있을 때 작곡가, 우리는 그들을 합성하기 위해 GPU를 사용해야합니다 그래서 SurfaceFlinger는 모든 것을 할 수 있어야합니다

하드웨어가 할 수있는 것 그리고 그 상황에서, 우리는 기본적으로, 스크래치 버퍼 – 다른 레이어 – 우리가 알고있는 형식으로 하드웨어 작곡가 수락 할 수 있습니다 그런 다음 사용자 정의 OpenGL 코드를 사용합니다 그 두 계층의 구성을 스스로 할 수 있습니다 그럼, 일단 우리가 그 부분을 다 끝내면, 우리는 두 개의 레이어 만 남았고 우리는 그것들이 Hardware Composer로 보내질 수 있다는 것을 알아라

그래서 그것이 우리가하는 일입니다 우리는 set을 호출 한 다음 화면에 표시합니다 CHET HAASE : 그럼 언젠가 호기심이 생기면, 이 명령은 adb shell dumpsys SurfaceFlinger 명령을 실행할 수 있습니다 ROMAIN GUY : 자본금 S, 자본금 F CHET HAASE : 매우 중요합니다

그리고 그것은 당신이 원하는 것보다 더 많은 정보를 얻게 될 것입니다 그러나 그것이 당신에게 보여줄 것 중 하나 화면의 창에 대한 테이블입니다 현재 그들이 대표되고 있는지 여부 오버레이 또는 프레임 버퍼로 ROMAIN GUY :이 명령을 꽤 실행해야하지만 내부적으로 수많은 최적화가 있기 때문에 신속하게 처리 할 수 ​​있습니다 따라서 레이어가 잠시 동안 화면에 있었다

우리는 그들이 변화하지 않는다는 것을 알고 있습니다 그들의 하드웨어 작곡가가 그들을 붕괴시키고 있을지 모른다 다시 바뀔 때까지 단일 레이어로 그래서 그 명령의 출력은 때로는 조금 있습니다 오해의 소지가 있습니다 결과를 볼 수도 있기 때문입니다

시간에 기반한 최적화 따라서 가장 좋은 방법은 일반적으로이 작업을 실행하는 것입니다 애니메이션이나 무언가를 운영 할 때 화면에서 변경 중입니다 그것은 당신에게 가장 가치있는 정보가 될 것입니다 그래서 우리가 이야기하지 않은 몇 가지 다른 것들

텍스트를 무효화하는 변형을 사용하라고 알려 왔습니다 직사각형 뷰의 일부만 무효화 할 수 있습니다 당신이 다시 칠해야 할 필요가 있음을 알았습니다 이는 구형 Android 기기에서 특히 중요했습니다

대역폭이 극도로 제한 되었기 때문입니다 우리는 소프트웨어 렌더링을 사용하고있었습니다 그리고 우리를위한 GPU 렌더링의 초창기에도, 우리는 꽤 쉽게 GPU를 맥 아웃했다 그래서 그것들은 정말로 중요한 저축이었습니다 더 이상이 작업을 수행 할 필요가 없습니다

심지어 최신 버전의 Android에서도 이 기능이 사용 중지되기 전에 실제로는 시스템에서 무시됩니다 이제 어떻게 될까요? 무효화하거나 무효화 할 때마다 뷰에 직사각형이있는 경우 렌더링 스레드의 전체보기를 재검토하려고합니다 그 유일한 손상된 지역을 재 계산하십시오 그것에 대해 걱정할 필요가 없습니다 그리고 우리가 제거하고있는 이유 중 하나 저축을 위해 더 이상 필요하지 않을뿐만 아니라, 하지만 오류가 발생하기 쉽기 때문입니다

한 번에 하나씩 오류나 반올림하는 것이 쉽습니다 오류 및 화면에 아티팩트를 가져올 수 있습니다 그리고 쳇과 나는 그걸 증명할 수있어 우리가 너무 많은 버그를 링크 시켰기 때문에 API 사용 그리고 프레임 워크 자체에는 여전히 버그가 있습니다 그 주위에

이제는 걱정할 필요가 없습니다 RecyclerView는 이제 프리 페치를 수행 할 수 있습니다 항목의 미리 CHASE HAASE : 예, 우리는 이것을 일찍 언급했습니다 이것은 우리가 지금 나가고있는 승리 중 하나입니다

때문에 별도의 렌더링 스레드를 가지고, 지금, 음, 유휴 시간이 있어요 UI 스레드는 동기화 된 후에 작업이 완료되었습니다 음, 유휴 시간을 생산적으로 사용할 수 있습니다 물건을 가져 오는 것과 같은 다른 일을 할 때 그것은 다음 몇 프레임에서 필요할지도 모른다는 것을 알고 있습니다 로망 가이 : 작곡을 위해서, 내부적으로, 우리는 실제 디스플레이의 개념을 가지고 있습니다

이것은 사용할 수있는 API입니다 예를 들어, 그게 우리가 스크린 샷을 찍을 때 사용하는 것입니다 또는 비디오를 녹음 할 때 또는 우리가 캐스팅 할 때 – 예를 들어 Chromecasting 우리가 효과적으로하는 것은 SurfaceFlinger에게 컴포지션을 수행하지만 직접 표시하지는 않습니다 다른 표면으로

그래서 이것은 표면을 만드는 또 다른 방법입니다 관심이 있으시면 훌륭한 샘플 애플리케이션이 있습니다 GitHub에서 K를 사용할 수있는 Graphika가 있습니다 그것은 그래픽 회원이 썼다 몇 년 전에 팀에

그것은 기본적으로 모든 것을 모아 놓은 것입니다 당신은 SurfaceFlinger, Surface, 미디어 인코더가있는 SurfaceView와 가상 디스플레이가 결합되어 있습니다 이 코드는 매우 흥미로운 코드입니다 색상 변환 Android O에서는 색상 관리, 이것이 우리가 적용 할 수있는 색 변환 중 하나입니다

야간 조명과 같은 것들도 색상 변환입니다 우리는 또한 색맹 시뮬레이션을합니다 그것들은 하드웨어에 의해 처리 될 수 있습니다 특정 상황에서 작곡가, 그리고 그들은 성능 문제의 원인이 될 수 있습니다 예를 들어 잠시 후, 야간 조명 N5X 또는 N6B에서 지원되지 않았습니다

이유 중 하나는 하드웨어였습니다 우리는 색 변환을 할 수있는 드라이버가 없었습니다 그래서 우리는 GPU 구성으로 돌아 가야했습니다 정말 비쌌습니다 배터리를 아프게 했으므로 장치에 기능이 있습니다

그리고 Chet가 말했듯이, 더 많은 세부 사항들이 많이 있습니다 렌더링 파이프 라인에 대해 이것은 단지 매우 높은 수준의 개요였습니다 우리는 과거에 많은 회담을 가졌습니다 더 자세히 설명하는 우리는 예를 들어, UI 렌더링 자체에서, 일괄 처리 및 병합을 어떻게 처리할까요? 그런 종류의 최적화 그래서 당신이 관심이 있다면, 당신은 그들을 참조 할 수 있습니다

그림자 계산은 흥미 롭습니다 나는 우리가 우리가 이야기 한 이야기가 있었다고 생각한다 그 세부 사항의 그러나 렌더링 파이프 라인에 정확히 어디에서 적합합니까? 일종의 영리합니다 그러나 그렇다

더 많이 거기에서 계속하고있다 그러나 잘만되면, 이것은 Android에서 어떻게 작동하는지 일반적인 감각을 제공합니다 ROMAIN GUY : 그걸로 끝났습니다 우리가 거기 멈출거야 고맙습니다

[박수 갈채] [음악 재생]

Android Demo

>> 안녕, 안녕 캘리포니아 마운틴 뷰에 오신 것을 환영합니다

저는 Google 본사에서 여기서 말하고 있습니다 그리고 내가 정말로 흥분되는 것에 대해 이야기하고 싶습니다 Android라고합니다 그것은 휴대폰을위한 새로운 오픈 소스 운영 체제 및 소프트웨어 플랫폼입니다 다만 나는 웹을위한 자유로운 공구에 소프트웨어에 중대한 서비스를 쓰는 방법을 배웠다

리눅스와 GNU, 이제 안드로이드를 사용하면 모바일에서 똑같은 일을 할 수 있습니다 전화 소프트웨어는 모두 무료이며, 소스는 완전하게 사용할 수 있으며, 새로운 강력한 응용 프로그램을 개발할 수 있습니다 현재 SDK가 출시 중입니다 당신은 그것을 다운로드 할 수 있습니다

그리고 몇 가지 주요 내용과 일부 응용 프로그램을 보여 드리기 위해 우리는 이미 개발했습니다 여기 스티브입니다 >> HOROWITZ : 아마도 당신은 들었을 것입니다 최근에 G-Phone에 관해서 조금 나는 실제로 G-Phone이 없다는 것을 알려 드리고자합니다

대신 안드로이드 플랫폼을 소개하고자합니다 이것은 플랫폼입니다, 우리는 희망합니다 사람들은 수천 개의 G-Phone을 만들 수 있습니다 내가 보여주고 싶은 첫 번째 장치 당신은 오늘 제가 지난 6 개월 동안 함께 살았던 프로토 타입입니다 훌륭한 제품을 만들려면 실제로 그 제품과 함께 살아야합니다

이 특정 장치 당신이 원하는 모든 기능을 갖춘 Android 소프트웨어 스택의 정식 버전을 실행 중입니다 기본 전화에서 기대하고있다 다음은 홈 화면의 예입니다 이곳은 당신이 브라우저,지도 또는 연락처와 같은 즐겨 찾는 모든 응용 프로그램에 액세스 할 수 있습니다 만약 누군가에게 전화하고 싶다면 이름을 입력하고 다이얼을 누르십시오

그리고 내 친구 한테 전화하고있어 에린 물론, 우리가 소프트웨어 개발 키트에 내장 한 것들 중 하나는 상호 작용하고 응용 프로그램을 서로 통합하는 기능 그래서 다른 예제에서는 연락처, 에린이 사는 곳을 알고 싶다고합시다 그냥 가서 이름을 입력하면됩니다

연락을 취하고 주소를 선택하면지도로 바로 연결됩니다 응용 프로그램은 Erin이 어디에 살고 있는지 보여주기 위해 바로 확대 할 것입니다 클릭하면 " 우리가 그녀가 Amphitheatre Parkway에 살고 있다는 것을 알게되면지도에 나타납니다 그것이 어디에 있는지 나는 아주 확신한다 그래서 나는 고속 도로가 무엇인지보기 위해 조금 축소하고 싶다

에 가까울 수도 있습니다 우리가 고속도로 101 근처에 있다는 것을 알 수 있습니다 홈 페이지에서 내가 보여주고 싶은 다른 것들 중 하나는 장치에 대한 능력입니다 Android 플랫폼을 사용하여 알림을받습니다 예를 들어 여기에서 알림을 받았습니다

내 친구 렉시 (Lexi)는 "피자가 좋아 보인다"라고 말했습니다 그녀가 원하는 것이 분명합니다 저녁에 처음 화면 상단에 나타 났고 나에게 말했습니다

that – 그 메시지의 내용 내가 그 메시지를 읽고 싶다면, 내가해야 할 모든 것 do는 위로 항해 중이다 그리고 당신은 알 수있다 – 오, Lexi로부터의 나의 알림이있다 그것은 "피자 "나는 대답하기를 원하면 엔터 키를 치고 내 문자 메시지로 들어갈 수있다 "좋아요

"라고 말하면 우리는 떠나게됩니다 우리가 피자를 먹는 것 같아 오늘 밤 저녁 내가 보여주고 싶은 다음 기기는 더 높은 수준의 프로토 타입입니다 고속 3G 네트워킹, 가속화 된 3D 그래픽과 같은 고급 기능이 포함되어 있습니다

터치 스크린 브라우저 응용 프로그램을 보여 드리겠습니다 웹 브라우저는 오픈 소스 WebKit 요즘 업계 표준으로, 데스크탑에 나타나는 것처럼 웹 페이지를보십시오 너 또 다른 것

웹 브라우저에 대한주의 사항은 고속 3G 데이터 네트워크를 통해로드된다는 것입니다 이 기기 3G 속도로 인터넷에 액세스하고 웹 페이지를 매우 빠르게로드 할 수 있습니다 지금, 여기에로드 된 페이지가 조금 더 확대되었습니다 그래서, 내가 더 많이보고 싶다면 페이지, 나는 그것을 잡고 조금만 돌아 다닐 수 있습니다 페이지를보고 싶으면 완전한 영광으로 볼 때, 나는 단순히 축소하여 볼 수있는 것과 똑같이 볼 수 있습니다

데스크톱 우리는 또한 브라우저에 대한 풍부한 시각적 기록을 가지고 있습니다 여기 들어가서 볼 수있어 내 브라우저의 역사에서 나는 최근에 방문한 모든 사이트를 볼 수 있습니다 그만큼 다음 신청서 저는 당신이 세계 시간임을 보여주고 싶습니다

이것은 당신에게 풍부한 그래픽 능력을 보여줍니다 Android 플랫폼의 이 경우에는 3D OpenGL ES를 사용하여 지구본을 렌더링합니다 여기에 손가락을 대고 아주 쉽게 돌릴 수 있습니다 나는 또한 지구와 놀 수있다 주위를 돌고있는 동안

Android 그래픽 API를 사용하면 3D 및 2D를 매우 쉽게 혼합 할 수 있습니다 제도법 다음으로, 고급 3D 하드웨어 기능 중 일부를 보여 드리고자합니다 이 프로토 타입은 "Quake"를 사용합니다 Android OpenGLs API에 작성된 모든 애플리케이션 하드웨어 가속을 최대한 활용할 수 있습니다

이제, 나는 보여주고 싶다 지도 응용 프로그램 나는 샌프란시스코시에 여기에있다 만지기 사용하기 이 장치의 기능을 사용하여 샌프란시스코 주변을 돌아 다니며 볼 수 있습니다 맵 타일이 3G 속도로로드됩니다

Android 플랫폼의 장점 중 하나는 우리는지도 뷰와 같은 기본 기능을 구축하여 애플리케이션을 재발견 할 필요가 없습니다 당신이 그것의 위에 무언가를 만들고 싶다면지도의 모든 기능 나 여기있어 스트리트 뷰의 엠 바카 데로에서 내가지도에 있던 곳에서부터 시작합니다 내가 원한다면, 나는 손가락을 가져 가면 그 이미지를 움직일 수 있고 나는 주변을 돌고 Embarcadero의 모습을 확인하십시오 나는 또한 확대 할 수있다

그것은 단지 일부의 미리보기 일 뿐이다 안드로이드 플랫폼이 할 수있는 것들 우리는 개발자들이 무엇을 볼 것인지 기다릴 수 없습니다 다음에 올라와 >> BRIN : 다시 오신 것을 환영합니다

우리가 만든 응용 프로그램 중 일부를 모두 볼 준비가되었습니다 하지만 최고의 응용 프로그램이 아닙니다 여기 아직 그것은 그들이 당신과 다른 많은 개발자들에 의해 쓰여질 것이기 때문입니다 너처럼

우리는이 개발자들에게 보상하고 그들을 가능한 한 많이 인식하고 싶습니다 그래서 우리는 1 천만 달러를 배당했습니다 우리는 개발하는 사람들에게 Android를 사용하는 최고의 애플리케이션 우리는 정말 대단한 것을 보길 고대하고 있습니다 앱 : 혁신적인 앱; Android에서 사용할 수있는 뛰어난 기능을 활용하십시오

및 휴대 전화; 그리고 전에 본적이없는 정말로 독창적 인 것들 나는 너의 모든 일을 보길 고대한다

The Making of Stronghold Kingdoms (iOS/Android)

그것이 바로 우리가 갔던 요점이었습니다 "맞습니다

우리는 단지 5 년간 아무것도 보지 않았습니까?" 우리가 Stronghold Kingdoms를하기로 결정했을 때 흥미로운 것들 중 하나 한 성을 짓고 포위 공격을 당하거나 한 방어를하는 것에 관한 성채와는 달리 그것은 당신이 그것을 할 수있게하지만 중세 전쟁의 현실을 재현 할 수있게 해줍니다 그것은 긴 게임이었다 : 전쟁보다는 전쟁, 다중 포위 공격, 당신이 실제로 한 달 정도 걸릴 수있는 포위 공격을 재현 할 수 있다는 사실 보통 큰 성은 하루 만에 내릴 수 있지만, 꽤 자주 마찰의 전쟁입니다 이것은 실제로 하나의 플레이어 게임보다 중세 전투의 측면을 재창조합니다 프로토 타입 우리에게는 의도의 상태에 관한 초기 프로토 타입이 있었기 때문에 우리는 Stronghold 버전을 가지고있었습니다

그리고 나서 우리는 "글쎄, 어떻게 연결시켜야 할까?"와 같았습니다 그리고 나서 모든 종류의 기술적 문제가 앞으로 수년 내내 나타날 것이며 우리는 재 작업해야 할 것입니다 우리는 데이터베이스에 대해 배우고, 웹 서버 기술에 대해 배우고, 많은 것을 배울 것입니다 핵심 기술을 몇 번 바꿨습니다 그렇죠? 그리고 웹 서버는 해결책을 찾는다

그래, 아무도 이런 종류의 게임을하지 않았다 실제로 많은 사람들이 지금도 왕국이하는 일을 정확히하지는 않습니다 그것은 그렇게 가파른 학습 곡선이기 때문에, 나는 생각합니다 그리고 운 좋게 우리는 계속할만큼 충분히 미쳤습니다 우리가 2 ~ 3 년을 보냈다는 사실을 무시하고 우리는 여전히 아무것도 얻지 못했습니다

2011 년 11 월, 우리가 나왔다 그것은 2010 년 11 월이었습니다 2010, 죄송합니다 그리고 나서 그것이 "우리가 방금 5 년 동안 아무것도 보지 못했습니까? 아니면 실제로 사람들이 우리에게 돈을 지불 할 것입니까?" 그것은 그렇게 느꼈다 그것은 그날에 했었습니다

"누가 알겠습니까?" 누가 압니까? 아무도 그 일을하지 않았기 때문에 우리는 그게 효과가 있을지 모르지만 운 좋게도 돈을 지불했습니다 내 말은, 그렇게했다 그것은 훌륭했다 우리가 한 일이 사람들에게 우리에게 돈을주고 싶어하는만큼 중요하다는 것을 아는 것은 놀랍습니다 또한 발사시 Stronghold를 아는 사람들이있었습니다

스트롱 홀드가 아닌 팬이 없었기 때문에 우리는 항상 스트롱 홀드 팬이 될 것이라고 생각했습니다 그리고 우리가 실제로 그것을 시작했을 때, 그것은 정말로 그렇게 좋아지지 않았습니다 스트롱 홀드가 아닌 다른 많은 팬이 우리가 깨달은 것보다 더 많이 플레이했는데, 분명히 목표가 분명합니다하지만 놀라움으로 우리를 데려갔습니다 우리는 Stronghold 팬들을 겨냥했지만 실제로는 더 넓은 그룹에게 호소력을 발휘했음을 알게되었습니다

내 말은, 스트롱 홀드가 다르다는거야 싱글 플레이어 스트롱 홀드는 왕국 플레이 스타일과 다릅니다 그러나 나는 Stronghold Kingdoms가 더 많은 청중에게 그리고 어떤면에서는 약간 더 하드 코어의 청중에게 호소한다고 생각한다 왜냐하면 당신은 중세의 주님이라는 무자비한 상태에 행복해야합니다 나는 우리에게 흥미로운 점은 모바일 시장에보다 깊이있는 전략 게임을 가져올 수 있는지 여부를 확인하는 것입니다

내가하는 모든 것을 – 그리고 나는 모바일 게임을하기 때문에 -하지만 잠시 후에 나는 조금 지루해한다 왜냐하면 그들은 모두 아주 가볍고 아주 가볍기 때문입니다 Stronghold Kingdoms와 함께 할 수 있기를 바랍니다 마침내 우리는 모바일 시장에 새로운 것을 가져올 수 있습니다 클랜 유형 게임과는 약간 다른 것을 찾고있는 사람들이 있어야합니다

Stronghold Kingdoms는 플레이어들에게 조금 다른 전략 게임을 할 수있는 기회를 제공합니다 당신이 왕국을 방어하기 위해 업무용 책상이나 집에 묶여 있지 않다는 사실은 당신이 외출 할 수 있다는 것을 의미합니다 그리고 거기 앉아서 친구들과 저녁을 먹을 수도 있고, 무시할 수도 있습니다 왜냐하면 거기에 앉아서 성을 수리하고 있기 때문입니다 나는 베타에서, 우리가 일을 떠날 때 (왕국을하는) 좋은 것을 알고 있다는 것을 기억한다

나는 그것이 통근하기 위해 나를 데려 갔던 전체의 시간 동안 생각하는 것을 기억한다, 나는 왕국에 관해 생각하고 있었다 그리고 집에 도착하자마자 아내를 무시하고 위층에 올라 컴퓨터를 켜서 내가 보낸 공격을 확인했습니다 그리고 명백하게, 모바일 버전으로, 그것은 약간 쉬웠을 것입니다, 나는 열차에서 그것을 점검 할 수있었습니다 그러나 나는 그 당시에 얼마나 편리했을지를 생각하고 기억하고 있습니다 Simon : 그래, 절대적으로

폴 : 그것은 바로 처음이었습니다 내 마음에, 드디어 화장실에서 놀 수있는 왕국의 버전 이죠? 그것은 멋진 이미지입니다 나는 우리가 그걸 끝낼 것이라고 생각한다 시청 해 주셔서 감사 드리며 동영상을 즐긴 경우 구독하고 구독하는 것을 잊지 마세요 다음 주 목요일에 Youtube의 Firefly Studios에서 더 많은 비디오를 감상하십시오