小编sky*_*ler的帖子

有必要退出HandlerThread吗?

我的应用程序使用a HandlerThread为需要在后台线程上运行的组件共享的一些操作.大多数情况下,此线程将处于等待状态.

我可以HandlerThread在我的应用程序中保持运行(等待),在必要时向其发送消息,但从不通过它退出HandlerThread.getLooper().quit()吗?这可能意味着HandlerThread即使在我的所有应用程序组件都被销毁之后,它仍将继续存在于等待状态.

最初这对我来说似乎是一个很大的问题 - 我绝对不想做的事 - 但我现在不确定.当Android杀死我的进程时,就像它需要释放CPU时间或内存一样,它将结束这个线程和我的UI线程.此外,线程将等待,因此它不会占用任何CPU时间.除此之外,我的应用程序使用了很多AsyncTasks,我知道利用线程池.根据我的理解,AsyncTask利用ThreadPoolExecutor,它不遵循任何应用程序生命周期回调(池中的线程在不使用时,只是坐等).

所以我的问题是,我可以使用HandlerThread跨多个应用程序组件,从不(或很少)退出它,并在不使用时让它等待,而不会遭受可怕的不良影响吗?

multithreading android handler

10
推荐指数
1
解决办法
2046
查看次数

如何在SQLAlchemy中表示自定义PostgreSQL域?

我开始将Alembic合并到我已经使用SQLAlchemy表定义的项目中.目前我的数据库架构是在我的应用程序外部管理的,我想将整个架构带入我的表定义文件中.

在PostgreSQL中,我使用自定义域来存储电子邮件地址.PostgreSQL DDL是:

CREATE DOMAIN email_address TEXT CHECK (value ~ '.+@.+')
Run Code Online (Sandbox Code Playgroud)

如何在SQLAlchemy中表示此域的创建及其作为列数据类型的用法?

python orm sqlalchemy alembic sql-domain

9
推荐指数
1
解决办法
545
查看次数

更新Adapter的基础数据的最佳实践方法是什么?

我遇到IllegalStateException将基础List更新为适配器(可能是ArrayAdapter或BaseAdapter的扩展,我不记得了).我目前没有或记住异常的文本,但它说明了List的内容更改的效果,而没有适配器已被通知更改.

此List /可以/从UI线程(main)以外的其他线程更新.更新此列表(添加项目)后,我调用notifyDataSetChanged.问题似乎是适配器或附加到适配器的ListView在调用此方法之前尝试更新自身.发生这种情况时,抛出IllegalStateException.

如果我在更新之前将ListView的可见性设置为GONE,那么再次可见,则不会发生错误.但这并不总是实用的.

我在某处读到你无法从另一个线程修改底层 - 这似乎限制了一个MVC模式,就像这个特定的List一样,我想从不同的线程中添加项目.我假设只要我调用notifyDataSetChanged()我就是安全的 - 在调用此方法之前,适配器没有重新访问底层List,但似乎并非如此.

我想我要问的是,从UI以外的线程更新底层列表是否安全?此外,如果我想修改适配器中的数据,我是否修改基础列表或适配器本身(通过其add()等方法).通过适配器修改数据似乎是错误的.

我在另一个网站上遇到了一个似乎与我有类似问题的人:http : //osdir.com/ml/Android-Developers/2010-04/msg01199.html(这是我抓住了Visibility.GONE和.VISIBLE idea).

为了让您更好地了解我的特定问题,我将介绍我的List,Adapter等的设置方法.

我有一个名为Queue的对象,它包含一个LinkedList.队列扩展了Observable,当通过其方法将事物添加到其内部列表时,我调用setChanged()和notifyListeners().此Queue对象可以在任意数量的线程中添加或删除项目.

我有一个包含适配器的"队列视图"活动.此活动在其onCreate()方法中将Observer侦听器注册到我的Queue对象.在Observer的update()方法中,我在Adapter上调用notifyDataSetChanged().

我添加了大量的日志输出,并确定当发生IllegalStateExcption时,我的Observer回调从未被调用过.因此,在Observer有机会通知其观察者之前,适配器注意到List的更改,并调用我的方法通知适配器内容已更改.

所以我想我要问的是,这是一个装配适配器的好方法吗?这是一个问题,因为我正在从UI线程以外的线程更新适配器的内容吗?如果是这种情况,我可能会想到一个解决方案(在创建UI线程时将Queler对象赋予UI线程,并使用该Handler进行所有List修改,但这似乎不合适).

我意识到这是一个非常开放的帖子,但我对此有点失落,并会对我写的内容有所评论.

android

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

PostgreSQL连接应该在Python Web应用程序中合并,还是每个请求创建一个新连接?

我正在用Python构建一个Web应用程序(使用Flask).我不打算使用SQLAlchemy或类似的ORM系统,而是直接使用Psycopg2.

我应该为每个新请求打开一个新的数据库连接(并随后关闭它)吗?或者我应该使用什么来汇集这些连接?

python postgresql web-applications psycopg2 flask

7
推荐指数
2
解决办法
4270
查看次数

如何在Jinja中对排序列表进行切片?

我有一个词典列表.我想首先对该列表进行排序,然后只迭代这些项的子集.

这是我试过的:

{% for response in responses|sort(true, attribute='response_date')[:5] %}
    <p>response</p>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但Jinja不喜欢这种语法,并引发了错误 TemplateSyntaxError: expected token 'end of statement block', got '['

如果我不使用sort()过滤器,则切片有效.但我想一起使用两者.

python jinja2

7
推荐指数
2
解决办法
6000
查看次数

可以从任何线程调用startServce()吗?

大多数Android框架组件都不是线程安全的 - 至少这是我通常使用的假设.

但是,startService()从后台线程调用是否安全?

我发现了Dianne Hackborn的帖子,他说sendBroadcast()从任何线程打电话都是安全的,所以我想假设这也是如此startService()(http://groups.google.com/group/android-developers/msg/ 38a09b52de93f70a).

有框架的人可以评论吗?

谢谢!

android

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

如何在PostgreSQL上使用SQLAlchemy创建一个独特的小写函数索引?

这是我想要生成的SQL:

CREATE UNIQUE INDEX users_lower_email_key ON users (LOWER(email));
Run Code Online (Sandbox Code Playgroud)

从SQLAlchemy Index文档中我希望这可以工作:

Index('users_lower_email_key', func.lower(users.c.email), unique=True)
Run Code Online (Sandbox Code Playgroud)

但是在我调用metadata.create(engine)表之后却创建了但是这个索引不是.我来自conf import dsn,DEBUG

from conf import dsn, DEBUG

engine = create_engine(dsn.engine_info())

metadata = MetaData()
metadata.bind = engine

users = Table('users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('email', String),
    Column('first_name', String, nullable=False),
    Column('last_name', String, nullable=False),
    )

Index('users_lower_email_key', func.lower(users.c.email), unique=True)

metadata.create_all(engine)
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL中查看表定义我看到没有创建这个索引.

\d users
                                   Table "public.users"
   Column   |       Type        |                        Modifiers
------------+-------------------+---------------------------------------------------------
 user_id    | integer           | not null default nextval('users_user_id_seq'::regclass)
 email      | character varying |
 first_name | character …
Run Code Online (Sandbox Code Playgroud)

postgresql sqlalchemy

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

从不调用Apache HttpClient HttpRequestRetryHandler

我正在使用Apache HTTP commons DefaultHttpClient,在构建之后,我正在设置它的重试处理程序:


httpClient.setHttpRequestRetryHandler(new HttpRequestRetryHandler() {
                @Override
                public boolean retryRequest(final IOException ioe,
                        final int numRetry, final HttpContext context)
                {
                    Log.d(TAG, "retry handler received exception of type: " + ioe.getClass().getName() + ", num retries: " + numRetry);
                    if (numRetry > 4) { // 3 retries
                        return false;
                    }
                    // Some exceptions we can retry without knowledge of which methods are being invoked
                    if (ioe instanceof NoHttpResponseException
                            || ioe instanceof UnknownHostException
                            || ioe instanceof SocketException) {
                    }
                    return false;
                }
        }); …
Run Code Online (Sandbox Code Playgroud)

java android httpclient

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

第二个参数对generate_subscripts有什么影响?

我试图理解PostgreSQL generate_subscripts函数的第二个参数.该文档指出的第二个参数是在其下标应生成所述阵列的尺寸:

generate_subscripts是一个便捷函数,它为给定数组的指定维生成一组有效的下标.

但是,对于我的二维示例数组,提供参数12两者都会生成相同的输出.

WITH data AS (
    select (array[['1','spam','3'], ['4','eggs','6'], ['7','ham','9']]) AS arr
)
SELECT arr[i][2] AS food
FROM data,
generate_subscripts((SELECT arr FROM data), 1) i;
Run Code Online (Sandbox Code Playgroud)

WITH data AS (
    select (array[['1','spam','3'], ['4','eggs','6'], ['7','ham','9']]) AS arr
)
SELECT arr[i][2] AS food
FROM data,
generate_subscripts((SELECT arr FROM data), 2) i;
Run Code Online (Sandbox Code Playgroud)

(Note 1vs. 2)都生成相同的输出:

 food
------
 spam
 eggs
 ham
(3 rows)
Run Code Online (Sandbox Code Playgroud)

我担心我不理解第二个论点generate_subscripts.有经验的人可以澄清这个论点的作用吗?

我正在运行PostgreSQL 9.1.6.

sql arrays postgresql

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

Froyo如何在主屏幕上显示对话框?

几天前我用2.2(Froyo)升级了我的Nexus One.今天早上当我去使用它时,我看到一个Dialog坐在家庭/启动器屏幕的顶部,通知我有更新可用,我现在或以后可以选择升级.

我的问题是,这个用于在主屏幕上显示Dialog(可能是AlertDialog)的API机制是什么?编写了一个Android应用程序后,我的理解是Dialogs只能显示在一个Activity上,并且一个服务无法显示一个Dialog(只有一个Toast).

谷歌是否可能将活动看起来像对话框?是否有新的API方法可用于显示Dialog而无需Activity?

layout android themes android-activity

3
推荐指数
1
解决办法
664
查看次数

current_user.is_authenticated()上的AttributeError

我正在使用Flask-Login,我想通过调用current_user.is_authenticated()来检查用户是否已登录.

我的瓶的应用程序与主组织为蓝本__init__.py,设置了我的应用程序,建立了蓝图,并初始化烧瓶登录文件.我有一个脚本,run.py位于一个目录中__init__.py,实例化应用程序并在调试模式下运行它.

__init.py__ 看起来(部分)像这样:

from flask import Flask, session, request, render_template                                                            
from flask.ext.login import LoginManager, current_user

from panel.views import dash, projects

from panel.users.models import User, AnonymousUser

app = Flask(__name__)
app.config.from_object("configure") 

login_manager = flask_login.LoginManager()
login_manager.init_app(app)
login_manager.login_view = "/signin"
login_manager.anonymous_user = AnonymousUser
@login_manager.user_loader
def load_user(str_id):
    return User.user_loader(str_id)

# Register all blueprints here.
app.register_blueprint(dash.bp, url_prefix="/dash")
app.register_blueprint(projects.bp, url_prefix="/projects")

logging.warning(current_user.is_authenticated())
Run Code Online (Sandbox Code Playgroud)

当我运行它时,run.py(看起来,部分看起来像这样):

from panel import app 

app.run(host='0.0.0.0', debug=True)
Run Code Online (Sandbox Code Playgroud)

提出此异常:

Traceback (most recent call last):
  File "run.py", line 5, …
Run Code Online (Sandbox Code Playgroud)

python flask

3
推荐指数
1
解决办法
4679
查看次数