- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Tôi có một tập tin gọi là table()
的方法,它生成一个包含 600 行的表。当我在 onCreate()
中运行此方法时,即在主 UI 线程中,我收到一条来自日志的消息:
I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread."
我发现,为了避免跳帧,我应该使用AsyncTask
。但是,我不知道如何在后台实现表格生成?我不能将 table()
方法放在 doInBackground(Void... params)
中,因为 doInBackground
不适用于 UI,但是我也不能将此方法放在 onPostExecute
中,因为它会给我跳帧。
hiện hữu AsyncTask
中实现表生成的正确方法是什么?
这是表格方法的代码,我在onCreate()
public void table(){
ScrollView scrollView = new ScrollView(this);
HorizontalScrollView horizontalScroll = new HorizontalScrollView(this);
TableLayout tableLayout = new TableLayout(this);
tableLayout.setBackgroundColor(Color.BLACK);
LayoutParams cellsParam = new LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
cellsParam.setMargins(1, 1, 1, 1);
for(int i = 0; i < 600; i++){
TableRow row = new TableRow(this);
TextView wayTextView = new TextView(this);
wayTextView.setText("text" + i);
wayTextView.setBackgroundColor(Color.WHITE);
wayTextView.setGravity(Gravity.CENTER);
row.addView(wayTextView, cellsParam);
tableLayout.addView(row);
}
horizontalScroll.addView(tableLayout);
scrollView.addView(horizontalScroll);
setContentView(scrollView);
}
câu trả lời hay nhất
有一种叫做“loop unrolling”的做法可以帮助您(但我们这样做不是为了“优化”,而是将循环分成不会阻塞的“一口大小” block UI 线程。)
创建 6 个任务,每个任务执行 100 行:或 10 个任务,每行 60 行(无论哪种方式最适合您的应用。)
我现在已经对此进行了测试,它按预期工作
顶部的“静态”计数是从 0 -> (N-1) 开始计数
package com.example.mike.myapplication;
import android.content.Context;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
static int count = 0;
@Ghi đè
được bảo vệ void onCreate(Gói savedInstanceState) {
super.onCreate(savedInstanceState);
thiết lậpContentView(R.layout.activity_main);
int totalCount = 600;
int numTasks = 10;
int division = totalCount / numTasks ;
// where did the other loop
for (int i = 0; i < numTasks ; i++) {
new UpdateRowsTask(this).executeOnExecutor(AsyncTask.SERIAL_EXECUTOR, Integer.valueOf(division));
}
}
public void doLog(String str) {
Log.d("TEST", str);
}
private static class UpdateRowsTask extends AsyncTask {
int maxCount ;
MainActivity _activity;
public UpdateRowsTask(MainActivity activity) {
_activity = activity;
}
@Ghi đè
protected Void doInBackground(Integer... params) {
maxCount = params[0]; // adjustable
trả về giá trị null;
}
protected void onPostExecute(Void result) {
LÀM {
_activity.doLog("" + count);
đếm++;
}
while ((count % maxCount) != 0 ) ;
}
}
}
我将“log.d()”作为我的“UI 线程”操作,但您可以轻松地添加行。
关于android - 如何使用 AsyncTask 避免跳帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536114/
Gần đây tôi đã thêm một số .gif vào /drawable để tôi có thể sử dụng chúng bằng các nút. Điều này hoạt động tốt (không có lỗi). Bây giờ khi tôi xây dựng lại/chạy ứng dụng của mình, tôi gặp lỗi sau: Error: Gradle: Execu
Có cách nào trong Android để trả lại đường dẫn tới dữ liệu bộ nhớ trong không? Tôi có 2 điện thoại thông minh Android (Samsung s2 và s7 edge) mà tôi đã cài đặt một ứng dụng. Tôi muốn sử dụng sqlit nằm trong đường dẫn này
Câu hỏi này đã có câu trả lời ở đây: Sự khác biệt giữa "?android:" và "@android:" trong bố cục android xml f
Tôi chỉ muốn biết sự khác biệt thực sự giữa điện thoại phát triển Android, điện thoại Android thông thường và điện thoại đã root Android. Chúng tôi không thể mua bộ công cụ phát triển từ các cửa hàng thực tế hoặc những nơi khác ngoài thị trường Android
Tôi đang cố gắng nâng cao dự án này kể từ khi cập nhật Gradle. Đây là một dự án nhóm và nó sử dụng plugin android-apt. Tôi đã thực hiện các thay đổi cú pháp cần thiết (biên dịch->triển khai và apt->bộ xử lý chú thích) nhưng trình biên dịch vẫn cho tôi biết rằng có
Tôi mới sử dụng Android và kotlin, vì vậy vui lòng giải quyết một vấn đề rất đơn giản! Tôi đã tạo một ứng dụng cơ bản bằng cách sử dụng các thành phần kiến trúc điều hướng, sử dụng thanh điều hướng ở dưới cùng và ba tùy chọn điều hướng. Mỗi tùy chọn điều hướng trỏ đến một đoạn dành riêng
Tôi hiện đang sử dụng SDK chính thức của Facebook dành cho Android. Tôi hiện đang sử dụng ứng dụng mẫu nâng cao nhưng tôi không biết cách làm cho ứng dụng này có được tường/luồng/trạng thái ứng dụng thay vì người dùng đã đăng nhập. Điều này có thể thực hiện được không? trong tình huống đó
Tôi gặp sự cố khi tải xuống tệp, tôi có thể tải tệp xuống trong trình giả lập nhưng nó không hoạt động trên điện thoại của tôi. Tôi đã xác định quyền truy cập Internet và ghi vào thẻ SD. Tôi có một tệp tài liệu trên máy chủ nếu người dùng nhấp vào tải xuống. Nó tải tập tin. Điều này hoạt động tốt trong trình mô phỏng nhưng
Câu hỏi này đã có câu trả lời ở đây: Sự khác biệt giữa trọng lực và bố cục_trọng lực trong Android là gì? (22 câu trả lời) Đóng 9
Bất cứ ai có thể cho tôi biết bộ nhớ cache của ứng dụng và bộ nhớ cache của ứng dụng là gì vì khi chúng ta nói về ứng dụng làm sạch bộ nhớ cache, khái niệm làm sạch bộ nhớ cache là làm sạch bộ nhớ cache của ứng dụng hoặc như bộ nhớ chính quản lý bộ nhớ, RAM, bộ nhớ cache là khác nhau và theo như tôi biết, chậm
Giả sử rằng ứng dụng Foo và Eggs nằm trên cùng một thiết bị Android. Một trong hai ứng dụng có thể nhận danh sách tất cả các ứng dụng trên thiết bị. Ứng dụng có thể biết liệu ứng dụng khác đã chạy chưa và đã chạy trong bao lâu? câu trả lời hay nhất
Tôi hơi bối rối, tôi chỉ thấy các ví dụ về việc chuyển từ Android sang PC hoặc từ Android sang PC. Tôi cần tạo một ứng dụng Android kết nối từ hai điện thoại (android) để trò chuyện video. Tôi đang suy nghĩ, tôi biết
Được sử dụng để khóa màn hình theo chương trình bằng Android. Tôi đã có một số ý tưởng hay từ các câu hỏi Stackoverflow trước đây về vấn đề này và tôi vẫn ổn, nhưng khi tôi chạy mã, không có ngoại lệ và không có lỗi. Ngoài ra, màn hình không bị khóa. Vui lòng nhập đoạn này
Văn bản: android:layout_alignParentStart Nếu đúng, làm cho cạnh bắt đầu của chế độ xem này khớp với cạnh bắt đầu
Tôi không biết sự khác biệt giữa hai thuộc tính và chiều cao này. Lấy TextView làm ví dụ, điều gì xảy ra nếu tôi đặt bố cục của nó thành quấn_content và chiều rộng của nó thành 50 nhúng? câu trả lời hay nhất
Mối quan hệ giữa hai thuộc tính này là gì? Nếu tôi có android:noHistory="true", thì có ích gì khi có android:finishOnTaskLaunch="true" không? Câu trả lời hay nhất giả định rằng ứng dụng của bạn có
Tôi là người mới và đang cố gắng hiểu mã XML sau: Nhìn vào tài liệu trên dev.android.com, nó cho biết "starStyle" là một hằng số trong R.attr, public static cuối cùng
Trong đoạn mã bên dưới, tại sao giao diện của nút radio thay đổi khi tôi đặt android:layout_width="fill_parent" và android:width="fill_parent" tôi đang nói
Thật khó để nói những gì để hỏi ở đây. Câu hỏi không rõ ràng, mơ hồ, không đầy đủ, quá rộng hoặc hùng biện và không thể trả lời hợp lý ở dạng hiện tại. Để được trợ giúp làm rõ vấn đề này để có thể mở lại, hãy truy cập Trung tâm trợ giúp.
Giả sử mình có một hàm fun myFunction(name:String, email:String){}, khi mình gọi hàm này là myFunction('Ali', 'ali@test.com ') thì sao
Tôi là một lập trình viên xuất sắc, rất giỏi!