标签: ui-thread

Android,创建一个简单的线程,将更新我的秒计数器

基本上,我试图运行一个秒计数器和一个水平计数器.每10秒我想要++级别.
但是那还没有实现,到目前为止我只是试图让秒显示但是我得到运行时异常和崩溃.
谷歌搜索我看到它,因为我试图从我的线程更新UI,这是不允许的.所以我想我将需要asyncTask,但我不知道如何用我简单的小程序做到这一点.请帮忙或给我一些替代方案......

package com.ryan1;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class main extends Activity {

int level = 1;
int seconds_running=0;

TextView the_seconds;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    the_seconds = (TextView) findViewById(R.id.textview_seconds);



    Thread thread1 = new Thread(){
        public void run(){
            try {
                sleep(1000); Log.d("RYAN", " RYAN ");

                updated_secs();
            } catch (Exception e) {
                e.printStackTrace();
                Log.d("RYAN", " "+e);
            }
        }
    };
    thread1.start();
}

public void updated_secs(){
    seconds_running++;
    the_seconds.setText(" "+seconds_running);
}
}
Run Code Online (Sandbox Code Playgroud)

multithreading android ui-thread

6
推荐指数
1
解决办法
1万
查看次数

android addView在后台线程中

我需要在循环中添加大量视图,而这个片段就是这样,应用程序还将有一个导航抽屉和操作栏,用户可以在其中执行操作.

所以我希望这个过程不会a)通过阻止用户来减慢app的速度,b)最好在后台线程中添加视图.

困境是我认为android不喜欢在非UI线程中添加视图,所以有最佳实践吗?我计划在片段视图中显示进度条视图对象,而其余视图是使用addView和相关计算生成的

android views ui-thread background-thread

6
推荐指数
1
解决办法
4496
查看次数

为什么只有Android中的UI线程才能更新UI?

有人可以向我解释为什么只有Android中的UI线程才能更新UI?为什么任何其他线程都无法更新UI?

java android ui-thread

5
推荐指数
1
解决办法
2025
查看次数

从不同线程实时更新QTableView数据的最佳策略

我有应用程序,现在开始几个线程(如5 - 10)从不同的来源收集数据.
它们与主GUI线程分离,因此我感觉GUI中没有任何缓慢,我可以在后台线程工作时继续工作.太棒了
但现在我希望能够在主GUI中的QTableView中显示结果.数据是它们的字符串,它可以有10,000到100,000个结果,在QTableView中可能有多达100,000行.

我的问题是从线程更新主GUI中的表的最佳方法是什么,因此更新时TH GUI不会很慢或空闲.

c++ multithreading ui-thread qtableview

5
推荐指数
1
解决办法
3641
查看次数

了解UI线程

我是初学者Android,我有一些困惑Android UI Thread.现在,我知道除了创建UI的线程之外没有任何线程可以修改它.

大.
这是Activity我的第一个Android应用程序,有点让我感到困惑.

public class NasaDailyImage extends Activity{
    public ProgressDialog modalDialog = null;
//------------------------------------------------------------------------------
    @Override
    protected void onCreate(Bundle savedInstanceState){

        //Instantiate progress dialog, skipping details.

        Button b = //get reference to button
        b.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                modalDialog.show(); // show modal
                Toast.makeText(getApplicationContext(), "Getting feeds", 500).show();
                new AsyncRetriever().execute(new IotdHandler()); // Get the feeds !!
            }
        });
    }
//------------------------------------------------------------------------------
    public synchronized void resetDisplay(boolean parseErrorOccured, 
        boolean imageErrorOccured,
        IotdHandler newFeeds){
        if(parseErrorOccured || imageErrorOccured){ …
Run Code Online (Sandbox Code Playgroud)

concurrency android ui-thread android-asynctask

5
推荐指数
1
解决办法
831
查看次数

addView 方法后未显示 Android 视图

我有 ViewGroup.addView() 方法的问题。我使用此代码向我的布局添加新视图:

TalbeLayout parent = (TableLayout)findViewById(R.id.this_does_not_matter);
parent.removeAllViews(); //this view group contains something at start
TextView tv = new TextView(this);
tv.setText("some text");
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lp);
parent.addView(tv);
Run Code Online (Sandbox Code Playgroud)

之后我就看不到我的 TextView。不仅如此,parent.getChildCount() 返回正确的值(如果我尝试添加一个孩子,则为 1)。在父视图的 onClick() 方法中,我尝试获取 TextView 的宽度和高度,所有这些都等于 0。为 TableView 和父级调用 requestLayout()、invalidate() 和 measure(500, 50) 没有效果。我什至尝试在 view.post(Runnable) 的帮助下添加新视图,尽管此代码是在 UI 线程中执行的。

我糊涂了。我真的不明白会发生什么。有人可以解释我做错了什么吗?

一个有趣的时刻: setLayoutParams() 没有效果。如果我设置了宽度=500 和高度=50 的参数,在onClick 方法中,我会得到宽度=-1 和高度=-1 的参数。

添加 TableRow 后的代码:

TableLayout parent = (TalleLayout)findViewById(R.id.this_does_not_matter);
parent.removeAllViews(); //this view group contains something at start
TextView tv = new TextView(this);
tv.setText("some …
Run Code Online (Sandbox Code Playgroud)

android ui-thread

5
推荐指数
1
解决办法
3284
查看次数

无法在未调用Looper.prepare()3的线程内创建处理程序

public class AddStudentActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_student);
}

public void add2(View view){
    //create 3 editText  ,  1 Textview
    EditText et_name, et_age;
    RadioButton rb_male;
    TextView tv_msg;

    //bind with xml widget
    et_name = (EditText)findViewById(R.id.et_name);
    et_age = (EditText)findViewById(R.id.et_age);
    rb_male = (RadioButton)findViewById(R.id.rb_male);
    tv_msg = (TextView)findViewById(R.id.tv_msg);
    //retrieve values
    String name = et_name.getText().toString();
    String age = et_age.getText().toString();
    String gender = "";
    if (rb_male.isChecked())
        gender = "male";
    else
        gender = "female";
    //call php
    new AddStudent(this, tv_msg).execute(name, age, gender);
   }
} …
Run Code Online (Sandbox Code Playgroud)

android ui-thread toast

5
推荐指数
1
解决办法
4803
查看次数

Asynctask 中的 Android 数据库操作会阻塞 UI 线程

我正在ondoInBackground内的方法中执行数据库操作。AsyncTaskAndroid

由于某种原因,UI该操作在 5-6 秒内被阻塞。

这对我来说没有任何意义, 中的操作doInBackground不应该在 中执行UI Thread,对吗?

这是我的代码:

private class CountItems extends AsyncTask<String, Void, Integer> {
    private ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(context);
        dialog.setCancelable(false);
        dialog.setMessage(getString(R.string.asynTask_loading));
        dialog.show();
    }

    @Override
    protected Integer doInBackground(String... params) {
        // This operation takes 5-6 seconds.
        return app.databaseSession().getMyObjectDao().count(selectedProject, filter, null, false);
    }

    @Override
    protected void onPostExecute(Integer result) {
        counterTextView.setText(String.valueOf(result));

        if (dialog.isShowing()) {
            dialog.dismiss();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我做了一个测试。如果我将 a 放在方法Thread.sleep()内部 …

database blocking ui-thread android-asynctask

5
推荐指数
0
解决办法
380
查看次数

Android UI渲染时间

我在Android Vital中收到一条警告,提示我的UI渲染时间太慢。

正如他们在重要页面上解释的那样:

冻结的UI框架:
每天会话的百分比,在此期间,用户体验超过0.1%的框架且渲染时间超过700毫秒。每日会话是指在设备上使用您的应用的一天。Google使用UI Toolkit框架收集应用程序渲染的每个帧的渲染时间,而不是直接使用OpenGL。学到更多

我不明白如何从这个问题开始。
我怀疑自己的活动,但似乎没有什么奇怪的。

在此处输入图片说明

android ui-thread android-anr-dialog google-console-developer android-rendering

5
推荐指数
0
解决办法
446
查看次数

如何在应用程序本身中进行昂贵的操作,例如在反应本机中搜索大列表?

我有一个包含 10000 条记录的 json,需要在 Flatlist 中显示。我正在使用工作正常的虚拟化列表。现在我有某些过滤器,单击后应过滤掉 json 并使用新数据重新渲染列表。我只是过滤掉数据。

const filters = foo1;
const largeList = [{ id:1, foo:'foo1',bar:10 },{id:2, foo:'foo1',bar:20} ...]
const filteredList = largeList.filter(l=>l.foo === filters && l.bar > 10);
Run Code Online (Sandbox Code Playgroud)

过滤器是动态的,这会滞后于我的应用程序,因为它会给 UI 线程带来压力。我已经使用了InteractionManager.runafterinteractions()但在这种情况下不起作用。如何在应用程序中执行如此昂贵的操作而不阻塞 UI 线程?

ui-thread react-native react-native-flatlist

5
推荐指数
1
解决办法
592
查看次数