1page.title=Hỗ trợ đa cửa sổ
2page.metaDescription=Hỗ trợ mới trong Android N để hiển thị nhiều hơn một ứng dụng cùng lúc.
3page.keywords="multi-window", "android N", "split screen", "free-form"
4
5@jd:body
6
7<div id="qv-wrapper">
8  <div id="qv">
9    <h2>Trong tài liệu này</h2>
10      <ol>
11        <li><a href="#overview">Tổng quan</a></li>
12        <li><a href="#lifecycle">Vòng đời đa cửa sổ</a></li>
13        <li><a href="#configuring">Cấu hình Ứng dụng của bạn cho Chế độ
14              Đa cửa sổ</a></li>
15        <li><a href="#running">Chạy Ứng dụng của bạn trong Chế độ Đa cửa sổ</a></li>
16        <li><a href="#testing">Kiểm thử Hỗ trợ Đa cửa sổ của Ứng dụng của bạn</a></li>
17      </ol>
18    <h2>Xem thêm</h2>
19      <ol>
20        <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Ứng dụng mẫu Multi-Windows
21          Playground</a></li>
22      </ol>
23  </div>
24</div>
25
26<p>
27  Android N thêm hỗ trợ cho hiển thị đồng thời nhiều hơn một ứng dụng
28  vào cùng một thời điểm. Trên thiết bị cầm tay, hai ứng dụng có thể chạy song song hoặc
29  trên dưới nhau trong chế độ <em>chia màn hình</em>. Trên thiết bị TV, ứng dụng có thể
30  sử dụng chế độ <em>ảnh trong ảnh</em> để tiếp tục phát lại video trong khi người dùng
31  đang tương tác với ứng dụng khác.
32</p>
33
34<p>
35  Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK, bạn có thể cấu hình cách ứng dụng của bạn
36  xử lý hiển thị đa cửa sổ. Ví dụ, bạn có thể quy định
37  các kích thước tối thiểu cho phép của hoạt động của bạn. Bạn cũng có thể vô hiệu hóa hiển thị đa cửa sổ cho
38  ứng dụng của bạn, đảm bảo rằng hệ thống chỉ hiển thị ứng dụng của bạn trong chế độ
39   toàn màn hình.
40</p>
41
42<h2 id="overview">Tổng quan</h2>
43
44<p>
45  Android N cho phép một vài ứng dụng chia sẻ màn hình ngay lập tức. Ví
46  dụ, người dùng có thể chia đôi màn hình ra, xem một trang web ở bên trái màn hình
47  trong khi đang tạo email ở bên phải màn hình. Trải nghiệm này của người dùng phụ thuộc vào
48  thiết bị:
49</p>
50
51<ul>
52  <li>Thiết bị cầm tay đang chạy Android N có chế độ
53  chia màn hình. Trong chế độ này, hệ thống sẽ lấp đầy màn hình bằng hai ứng dụng
54  song song nhau hoặc trên dưới. Người dùng có thể kéo đường chia
55  phân tách hai ứng dụng để hiển thị một ứng dụng rộng hơn và ứng dụng còn lại nhỏ đi.
56  </li>
57
58  <li>Trên Trình phát Nexus đang chạy Android N, các ứng dụng có thể tự đặt chúng
59  vào trong <a href="picture-in-picture.html">chế độ ảnh trong ảnh</a>, cho phép
60  các ứng dụng này tiếp tục hiển thị nội dung khi người dùng duyệt web hoặc tương tác với
61  ứng dụng khác.
62  </li>
63
64  <li>Các nhà sản xuất thiết bị có kích cỡ lớn hơn có thể chọn kích hoạt chế độ
65  hình dạng tự do, trong đó người dùng có thể tự do thay đổi kích thước mỗi hoạt động. Nếu
66  nhà sản xuất đã kích hoạt tính năng này, ngoài
67  chế độ chia màn hình, thiết bị sẽ còn có chế độ hình dạng tự do.
68  </li>
69</ul>
70
71<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
72    {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
73<p class="img-caption">
74  <strong>Hình 1.</strong> Hai ứng dụng chạy trong chế độ chia màn hình.
75</p>
76
77<p>
78  Người dùng có thể chuyển vào trong chế độ đa cửa sổ bằng các cách sau:
79</p>
80
81<ul>
82  <li>Nếu người dùng mở màn hình <a href="{@docRoot}guide/components/recents.html">Overview
83  </a> và thực hiện nhấn giữ
84  tiêu đề của hoạt động, họ có thể kéo hoạt động đó đến phần được tô sáng của
85  màn hình để đặt hoạt động đó vào trong chế độ đa cửa sổ.
86  </li>
87
88  <li>Nếu người dùng thực hiện nhấn giữ nút Overview, thiết bị sẽ đặt
89  hoạt động hiện tại vào trong chế độ đa cửa sổ, và mở màn hình Overview để
90  cho phép người dùng chọn một hoạt động khác để chia sẻ màn hình.
91  </li>
92</ul>
93
94<p>
95  Người dùng có thể <a href="{@docRoot}guide/topics/ui/drag-drop.html">kéo và
96  thả</a> từ một hoạt động sang một hoạt động khác trong khi các hoạt động này vẫn đang chia sẻ
97  cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một hoạt động
98  đơn lẻ.)
99</p>
100
101<h2 id="lifecycle">Vòng đời đa cửa sổ</h2>
102
103<p>
104  Chế độ đa cửa sổ không thay đổi <a href="{@docRoot}training/basics/activity-lifecycle/index.html">vòng đời
105  của hoạt động</a>.
106</p>
107
108<p>
109  Trong chế độ đa cửa sổ, chỉ hoạt động mà người dùng đã tương tác gần đây nhất
110  mới hoạt động trong khoảng thời gian xác định. Hoạt động này được cân nhắc <em>ở trên cùng</em>.
111  Tất cả các hoạt động khác sẽ ở trong tình trạng tạm dừng, ngay cả khi chúng vẫn hiển thị.
112  Tuy nhiên, hệ thống sẽ cấp mức ưu tiên cao hơn cho hoạt động bị tạm dừng nhưng vẫn hiển thị này
113  so với các hoạt động không hiển thị. Nếu người dùng tương tác với một trong những
114  hoạt động bị tạm dừng, hoạt động đó sẽ được tiếp tục, và hoạt động trên cùng trước đó
115  sẽ bị tạm dừng.
116</p>
117
118<p class="note">
119  <strong>Lưu ý:</strong> Trong chế độ đa cửa sổ, một ứng dụng có thể trong trạng thái
120  tạm dừng và vẫn hiển thị với người dùng. Ứng dụng có thể cần tiếp tục
121  các hoạt động của nó thậm chí trong khi đamg bị tạm dừng. Ví dụ, một ứng dụng phát video đang ở trong
122  chế độ tạm dừng nhưng vẫn hiển thị thì sẽ tiếp tục hiển thị video của nó. Vì lý do
123  này, chúng tôi đề nghị các hoạt động phát video <em>không</em> tạm dừng
124  video trong trình xử lý{@link android.app.Activity#onPause onPause()}.
125  Thay vào đó, các ứng dụng nên tạm dừng video trong {@link android.app.Activity#onStop
126  onStop()}, và tiếp tục phát lại trong {@link android.app.Activity#onStart
127  onStart()}.
128</p>
129
130<p>
131  Khi người dùng đặt một ứng dụng vào trong chế độ đa cửa sổ, hệ thống sẽ thông báo về
132  hoạt động thay đổi cấu hình đó, như được quy định trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý Thay đổi
133  Thời gian chạy</a>. Về cơ bản, thay đổi này có ngụ ý về vòng đời hoạt động tương tự
134  vì khi hệ thống thông báo cho ứng dụng rằng thiết bị đã chuyển
135  từ chế độ hướng dọc sang chế độ ngang, ngoại trừ trường hợp các kích thước của thiết bị
136  đã được thay đổi thay vì chỉ bị hoán đổi. Như đã thảo luận trong phần <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý Thay đổi
137  Thời gian chạy</a>, hoạt động của bạn có thể tự xử lý thay đổi cấu hình này, hoặc nó
138  có thể cho phép hệ thống hủy hoạt động này và tạo lại nó với
139  các kích thước mới.
140</p>
141
142<p>
143  Nếu người dùng thay đổi kích thước của một cửa sổ và làm nó rộng hơn ở bất kỳ kích thước nào,
144  hệ thống sẽ thay đổi kích thước của hoạt động để khớp với hành động của người dùng và phát hành <a href="{@docRoot}guide/topics/resources/runtime-changes.html">các thay đổi thời gian chạy</a>
145  nếu cần. Nếu ứng dụng bị trễ lại trong khi vẽ các vùng mới được hiển thị,
146  hệ thống sẽ tạm thời lấp đầy các vùng đó bằng một màu được quy định bởi thuộc tính {@link
147  android.R.attr#windowBackground windowBackground} hoặc bằng thuộc tính kiểu
148  <code>windowBackgroundFallback</code> mặc định.
149</p>
150
151<h2 id="configuring">Cấu hình Ứng dụng của bạn cho Chế độ Đa cửa sổ</h2>
152
153<p>
154  Nếu ứng dụng của bạn nhắm đến Android N, bạn có thể cấu hình cách thức và
155  liệu các hoạt động của ứng dụng có hỗ trợ hiển thị đa cửa sổ không. Bạn có thể đặt
156  các thuộc tính trong bản kê khai của bạn để kiểm soát cả kích cỡ và bố trí.
157  Cài đặt thuộc tính của hoạt động gốc sẽ áp dụng cho tất cả các hoạt động
158  nằm trong ngăn xếp hoạt động của nó.
159</p>
160
161<p class="note">
162  <strong>Lưu ý:</strong> Nếu bạn dựng một ứng dụng đa hướng bằng phiên bản
163   SDK thấp hơn Android N, và người dùng sử dụng ứng dụng đó trong
164  chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó. Hệ thống sẽ hiển thị một
165  hộp hội thoại cảnh báo người dùng rằng ứng dụng này có thể có hành vi không như kỳ vọng. Hệ thống
166  <em>không</em> thay đổi kích cỡ của ứng dụng có hướng cố định; nếu
167  người dùng cố mở một ứng dụng có hướng cố định dưới chế độ đa cửa sổ,
168  ứng dụng này sẽ chiếm toàn bộ màn hình.
169</p>
170
171<h4 id="resizeableActivity">android:resizeableActivity</h4>
172<p>
173  Đặt thuộc tính này trong <code>&lt;activity&gt;</code> của bản kê khai của bạn hoặc node
174  <code>&lt;application&gt;</code> để kích hoạt hoặc vô hiệu hóa hiển thị
175  đa cửa sổ:
176</p>
177
178<pre>
179android:resizeableActivity=["true" | "false"]
180</pre>
181
182<p>
183  Nếu thuộc tính này được đặt thành true, hoạt động có thể được khởi chạy trong
184 chế độ chia màn hình và hình dạng tự do. Nếu thuộc tính này được đặt thành false,
185  hoạt động sẽ không hỗ trợ chế độ đa cửa sổ. Nếu giá trị này là false, và
186  người dùng cố khởi chạy hoạt động trong chế độ đa cửa sổ, hoạt động đó sẽ
187  chiếm toàn màn hình.
188</p>
189
190<p>
191  Nếu ứng dụng của bạn nhắm đến Android N, nhưng bạn chưa quy định giá trị
192  cho thuộc tính này, giá trị của thuộc tính sẽ mặc định đặt là true.
193</p>
194
195<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
196
197<p>
198  Đặt thuộc tính này trong node <code>&lt;activity&gt;</code> của bản kê khai của bạn để
199  cho biết liệu hoạt động này có hỗ trợ hiển thị ảnh trong ảnh hay không. Thuộc tính
200  này được bỏ qua nếu <code>android:resizeableActivity</code> là false.
201</p>
202
203<pre>
204android:supportsPictureInPicture=["true" | "false"]
205</pre>
206
207<h3 id="layout">Thuộc tính bố trí</h3>
208
209<p>
210  Với Android N, phần tử bản kê khai <code>&lt;layout&gt;</code>
211  có hỗ trợ một số thuộc tính sẽ ảnh hưởng đến cách hoạt động có hành vi như thế nào trong
212  chế độ đa cửa sổ:
213</p>
214
215<dl>
216  <dt>
217    <code>android:defaultWidth</code>
218  </dt>
219
220  <dd>
221    Chiều rộng mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do.
222  </dd>
223
224  <dt>
225    <code>android:defaultHeight</code>
226  </dt>
227
228  <dd>
229    Chiều cao mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do.
230  </dd>
231
232  <dt>
233    <code>android:gravity</code>
234  </dt>
235
236  <dd>
237    Vị trí ban đầu của hoạt động khi được khởi chạy trong chế độ hình dạng tự do. Xem tham chiếu
238    {@link android.view.Gravity} về các giá trị phù hợp.
239  </dd>
240
241  <dt>
242    <code>android:minimalSize</code>
243  </dt>
244
245  <dd>
246    Chiều cao và chiều rộng tối thiểu cho hoạt động trong cả chế độ chia màn hình
247    và chế độ hình dạng tự do. Nếu người dùng di chuyển thanh phân chia trong chế độ chia màn hình
248    để làm cho hoạt động nhỏ hơn mức tối thiểu quy định, hệ thống sẽ cắt xén
249    hoạt động đó thành kích cỡ mà người dùng yêu cầu.
250  </dd>
251</dl>
252
253<p>
254  Ví dụ, đoạn mã sau đây sẽ cho biết cách quy định kích thước và vị trí mặc định
255   của một hoạt động và kích thước tối thiểu của nó, khi hoạt động được hiển thị trong
256  chế độ hình dạng tự do:
257</p>
258
259<pre>
260&lt;activity android:name=".MyActivity"&gt;
261    &lt;layout android:defaultHeight="500dp"
262          android:defaultWidth="600dp"
263          android:gravity="top|end"
264          android:minimalSize="450dp" /&gt;
265&lt;/activity&gt;
266</pre>
267
268<h2 id="running">Chạy Ứng dụng của bạn trong Chế độ Đa cửa sổ</h2>
269
270<p>
271  Android N có tính năng mới để hỗ trợ các ứng dụng có thể chạy
272  trong chế độ đa cửa sổ.
273</p>
274
275<h3 id="disabled-features">Các tính năng bị vô hiệu hóa trong Chế độ Đa cửa sổ</h3>
276
277<p>
278  Một số tính năng bị vô hiệu hóa hoặc bỏ qua khi một thiết bị đang ở chế độ
279  đa cửa sổ bởi các tính năng này không có ý nghĩa đối với một hoạt động có thể đang chia sẻ
280  màn hình thiết bị với các hoạt động hoặc ứng dụng khác. Các tính năng đó bao gồm:
281
282<ul>
283  <li>Ví dụ, một vài tùy chọn tùy chỉnh <a href="{@docRoot}training/system-ui/index.html">System UI</a>
284  sẽ bị vô hiệu hóa, ứng dụng không thể ẩn thanh trạng thái
285  nếu chúng đang chạy trong chế độ toàn màn hình.
286  </li>
287
288  <li>Hệ thống sẽ bỏ qua các thay đổi đối với thuộc tính <code><a href=
289  "{@docRoot}guide/topics/manifest/activity-element.html#screen"
290  >android:screenOrientation</a></code>.
291  </li>
292</ul>
293
294<h3 id="change-notification">Thông báo và truy vấn thay đổi đa cửa sổ</h3>
295
296<p>
297  Các phương thức mới sau đây đã được thêm vào lớp {@link android.app.Activity}
298  để hỗ trợ hiển thị đa cửa sổ. Để biết chi tiết về mỗi phương thức, xem
299  <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham chiếu N Preview SDK</a>.
300</p>
301
302<dl>
303  <dt>
304    <code>Activity.inMultiWindow()</code>
305  </dt>
306
307  <dd>
308    Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ đa cửa sổ hay không.
309  </dd>
310
311  <dt>
312    <code>Activity.inPictureInPicture()</code>
313  </dt>
314
315  <dd>
316    Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ ảnh trong ảnh hay không.
317
318    <p class="note">
319      <strong>Lưu ý:</strong> Chế độ Ảnh trong ảnh là trường hợp đặc biệt
320      của chế độ đa cửa sổ. Nếu <code>myActivity.inPictureInPicture()</code>
321      trả về là true, thì <code>myActivity.inMultiWindow()</code> cũng trả về là
322      true.
323    </p>
324  </dd>
325
326  <dt>
327    <code>Activity.onMultiWindowChanged()</code>
328  </dt>
329
330  <dd>
331    Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài
332    chế độ đa cửa sổ. Hệ thống sẽ chuyển cho phương thức giá trị true nếu
333    hoạt động đang đi vào chế độ đa cửa sổ, và false nếu hoạt động
334    đang rời chế độ đa cửa sổ.
335  </dd>
336
337  <dt>
338    <code>Activity.onPictureInPictureChanged()</code>
339  </dt>
340
341  <dd>
342    Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài
343    chế độ ảnh trong ảnh. Hệ thống sẽ chuyển cho phương thức một giá trị true nếu
344    hoạt động đang đi vào chế độ ảnh trong ảnh, và false nếu hoạt động
345    đang rời chế độ ảnh trong ảnh.
346  </dd>
347</dl>
348
349<p>
350  Cũng có các phiên bản {@link android.app.Fragment} của từng phương thức
351  này, ví dụ như <code>Fragment.inMultiWindow()</code>.
352</p>
353
354<h3 id="entering-pip">Vào chế độ ảnh trong ảnh</h3>
355
356<p>
357  Để đặt một hoạt động vào trong chế độ ảnh trong ảnh, hãy gọi phương thức mới
358  <code>Activity.enterPictureInPicture()</code>. Phương thức này sẽ không có ảnh hưởng nếu
359  thiết bị không hỗ trợ chế độ ảnh trong ảnh. Để biết thêm thông tin,
360  hãy xem tài liệu <a href="picture-in-picture.html">Ảnh trong ảnh</a>.
361</p>
362
363<h3 id="launch">Khởi chạy Hoạt động Mới trong Chế độ Đa cửa sổ</h3>
364
365<p>
366  Khi bạn khởi chạy một hoạt động mới, bạn có thể gợi ý cho hệ thống rằng hoạt động
367  mới sẽ được hiển thị liền kề hoạt động hiện tại, nếu có thể. Để thực hiện điều
368  này, hãy dùng cờ
369  <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Việc chuyển
370  cờ này yêu cầu hành vi sau:
371</p>
372
373<ul>
374  <li>Nếu thiết bị đang ở chế độ chia màn hình, hệ thống sẽ cố tạo ra
375  hoạt động mới bên cạnh hoạt động đã khởi chạy nó, vì vậy hai hoạt động này
376  sẽ chia sẻ cùng một màn hình. Hệ thống không được đảm bảo có thể làm được điều này, nhưng nó
377 làm cho các hoạt động ở liền kề nhau nếu có thể.
378  </li>
379
380  <li>Nếu thiết bị không ở chế độ chia màn hình, cờ này sẽ không có tác dụng.
381  </li>
382</ul>
383
384<p>
385  Nếu thiết bị đang ở chế độ hình dạng tự do và bạn đang khởi chạy một hoạt động mới, bạn có thể
386  quy định kích thước của hoạt động mới và vị trí màn hình bằng cách gọi
387  <code>ActivityOptions.setLaunchBounds()</code>. Phương thức này sẽ không có ảnh hưởng nếu
388  thiết bị không ở chế độ đa cửa sổ.
389</p>
390
391<p class="note">
392  <strong>Lưu ý:</strong> Nếu bạn khởi chạy một hoạt động trong một ngăn xếp tác vụ, hoạt động
393  này sẽ thay thế hoạt động trên màn hình, kế thừa tất cả các thuộc tính đa cửa sổ
394  của nó. Nếu bạn muốn khởi chạy hoạt động mới dưới dạng một cửa sổ
395  riêng trong chế độ đa cửa sổ, bạn phải khởi chạy nó trong một ngăn xếp tác vụ mới.
396</p>
397
398<h3 id="dnd">Hỗ trợ kéo và thả</h3>
399
400<p>
401  Người dùng có thể <a href="{@docRoot}guide/topics/ui/drag-drop.html">kéo và
402  thả</a> dữ liệu từ một hoạt động này sang một hoạt động khác trong khi các hoạt động này vẫn đang
403  chia sẻ cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một
404  hoạt động đơn lẻ.) Vì lý do này, bạn có thể muốn thêm tính năng kéo và thả
405  vào ứng dụng của bạn nếu ứng dụng của bạn hiện không hỗ trợ tính năng này.
406</p>
407
408<p>
409  N Preview SDK mở rộng gói <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
410  để hỗ trợ kéo và thả giữa các ứng dụng. Để biết chi tiết về các lớp và phương thức
411  sau, hãy xem <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham chiếu N
412  Preview SDK</a>.
413</p>
414
415<dl>
416  <dt>
417    <code>android.view.DropPermissions</code>
418  </dt>
419
420  <dd>
421    Đối tượng mã thông báo chịu trách nhiệm về việc quy định các quyền cấp cho ứng dụng
422    nhận được thao tác thả.
423  </dd>
424
425  <dt>
426    <code>View.startDragAndDrop()</code>
427  </dt>
428
429  <dd>
430    Bí danh mới cho {@link android.view.View#startDrag View.startDrag()}. Để
431    kích hoạt kéo và thả giữa các hoạt động, hãy chuyển cờ mới
432    <code>View.DRAG_FLAG_GLOBAL</code>. Nếu bạn cần cấp quyền URI cho
433    hoạt động của đối tượng nhận, hãy chuyển các cờ mới
434    <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> hoặc
435    <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, nếu phù hợp.
436  </dd>
437
438  <dt>
439    <code>View.cancelDragAndDrop()</code>
440  </dt>
441
442  <dd>
443    Hủy thao tác kéo hiện đang diễn ra. Chỉ có thể được gọi bằng
444    ứng dụng đã khởi nguồn thao tác kéo đó.
445  </dd>
446
447  <dt>
448    <code>View.updateDragShadow()</code>
449  </dt>
450
451  <dd>
452    Thay thế bóng kéo cho thao tác kéo hiện đang diễn ra. Chỉ có thể
453    được gọi bằng ứng dụng đã khởi nguồn thao tác kéo đó.
454  </dd>
455
456  <dt>
457    <code>Activity.requestDropPermissions()</code>
458  </dt>
459
460  <dd>
461    Yêu cầu các quyền cho URI nội dung đã chuyển với {@link
462    android.content.ClipData} có chứa trong {@link android.view.DragEvent}.
463  </dd>
464</dl>
465
466<h2 id="testing">Kiểm thử Hỗ trợ Đa cửa sổ của Ứng dụng của bạn</h2>
467
468<p>
469  Dù cho bạn có cập nhật ứng dụng của mình lên Android N hay không, bạn cũng nên
470  xác minh cách thiết bị có hành vi như thế nào trong chế độ đa cửa sổ trong trường hợp người dùng cố khởi chạy nó
471  ở chế độ đa cửa sổ trên thiết bị chạy Android N.
472</p>
473
474<h3 id="configuring">Cấu hình Thiết bị Kiểm thử</h3>
475
476<p>
477  Nếu bạn cài đặt Android N trên thiết bị, chế độ chia màn hình
478  sẽ được tự động hỗ trợ.
479</p>
480
481<h3 id="test-non-n">Nếu ứng dụng của bạn không được dựng bằng N Preview SDK</h3>
482
483<p>
484  Nếu bạn dựng ứng dụng của mình bằng N Preview SDK, và người dùng cố sử dụng ứng dụng này
485  trong chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó trừ khi ứng dụng này
486  khai báo hướng cố định.
487</p>
488
489<p>
490  Nếu ứng dụng không khai báo hướng cố định, bạn nên khởi chạy ứng dụng của bạn
491  trên thiết bị đang chạy Android N và cố đặt ứng dụng vào trong
492  chế độ chia màn hình. Xác minh rằng trải nghiệm người dùng là
493  chấp nhận được khi ứng dụng bị bắt buộc thay đổi kích cỡ.
494</p>
495
496<p>
497  Nếu ứng dụng khai báo hướng cố định, bạn nên cố đặt ứng dụng vào trong
498  chế độ đa cửa sổ. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ
499  ở chế độ toàn màn hình.
500</p>
501
502<h3 id="test-mw">Nếu bạn hỗ trợ chế độ đa cửa sổ</h3>
503
504<p>
505  Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK và chưa vô hiệu hóa
506  hỗ trợ đa cửa sổ, hãy xác minh hành vi sau dưới chế độ chia màn hình
507  và chế độ hình dạng tự do.
508</p>
509
510<ul>
511  <li>Khởi chạy ứng dụng trong chế độ toàn màn hình, rồi chuyển sang chế độ đa cửa sổ bằng cách
512  nhấn giữ nút Overview. Xác minh rằng ứng dụng đã chuyển đổi đúng cách.
513  </li>
514
515  <li>Khởi chạy ứng dụng trực tiếp trong chế độ đa cửa sổ, và xác thực rằng ứng dụng này
516  khởi chạy đúng cách. Bạn có thể khởi chạy ứng dụng trong chế độ đa cửa sổ bằng cách nhấn vào nút
517  Overview, rồi nhấn giữ vào thanh tiều đề của ứng dụng của bạn và kéo nó
518  đến một trong những vùng được tô sáng trên màn hình.
519  </li>
520
521  <li>Thay đổi kích thước ứng dụng của bạn trong chế độ chia màn hình bằng cách kéo đường phân chia.
522  Xác minh rằng ứng dụng thay đổi kích thước mà không bị lỗi, và các phần tử UI cần thiết
523  vẫn hiển thị.
524  </li>
525
526  <li>Nếu bạn đã quy định các kích cỡ tối thiểu cho ứng dụng của bạn, hãy cố thay đổi kích thước của ứng dụng
527  sao cho nhỏ hơn các kích thước đã quy định đó. Xác minh rằng bạn không thể thay đổi kích cỡ của ứng dụng để
528  nhỏ hơn kích cỡ tối thiểu đã quy định.
529  </li>
530
531  <li>Thông qua tất cả các bài kiểm thử, hãy xác minh rằng hiệu năng của ứng dụng của bạn là có thể chấp nhận được. Ví
532  dụ, xác minh rằng sẽ không bị trễ quá lâu để cập nhật UI sau khi
533  ứng dụng bị thay đổi kích thước.
534  </li>
535</ul>
536
537<h4 id="test-checklist">Danh sách kiểm thử</h4>
538
539<p>
540  Để xác minh hiệu năng ứng dụng của bạn trong chế độ đa cửa sổ, hãy thử các thao tác
541  sau. Bạn nên thử các thao tác này trong cả chế độ chia màn hình và
542  chế độ đa cửa sổ, trừ khi có lưu ý khác.
543</p>
544
545<ul>
546  <li>Vào và rời chế độ đa cửa sổ.
547  </li>
548
549  <li>Hãy chuyển từ ứng dụng của bạn sang ứng dụng khác, và xác minh rằng ứng dụng có hành vi
550  đúng cách trong khi nó hiển thị nhưng không hoạt động. Ví dụ nếu ứng dụng của bạn đang
551  phát video, hãy xác minh rằng video tiếp tục phát trong khi người dùng đang
552  tương tác với một ứng dụng khác.
553  </li>
554
555  <li>Trong chế độ chia màn hình, hãy thử di chuyển thanh phân chia để làm cho ứng dụng của bạn
556  rộng hơn và nhỏ hơn. Thử các thao tác này trong cả cấu hình song song và
557  trên dưới. Xác minh rằng ứng dụng không bị treo,
558  các chức năng thiết yếu vẫn hiển thị, và thao tác thay đổi kích cỡ không quá
559   lâu.
560  </li>
561
562  <li>Thực hiện một vài thao tác thay đổi kích cỡ nối tiếp nhau thật nhanh. Xác minh rằng ứng dụng
563  của bạn không bị lỗi hoặc bị rò rỉ bộ nhớ. Để biết thông tin về kiểm tra việc sử dụng bộ nhớ của
564  ứng dụng, xem <a href="{@docRoot}tools/debugging/debugging-memory.html">
565  Kiểm tra Sử dụng RAM của bạn</a>.
566  </li>
567
568  <li>Sử dụng ứng dụng của bạn như thông thường trong một số cấu hình cửa sổ khác nhau, và
569  xác minh rằng ứng dụng có hành vi bình thường. Xác minh rằng có thể đọc được các chữ và
570  các phần tử UI không quá nhỏ để tương tác với chúng.
571  </li>
572</ul>
573
574<h3 id="test-disabled-mw">Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ</h3>
575
576<p>
577  Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ bằng cách đặt
578  <code>android:resizableActivity="false"</code>, bạn nên khởi chạy ứng dụng của mình trên
579  thiết bị chạy Android N và cố đặt ứng dụng này vào trong
580  cả chế độ hình dạng tự do và chế độ chia màn hình. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ
581  ở chế độ toàn màn hình.
582</p>
583