我的应用程序使用a HandlerThread为需要在后台线程上运行的组件共享的一些操作.大多数情况下,此线程将处于等待状态.
我可以HandlerThread在我的应用程序中保持运行(等待),在必要时向其发送消息,但从不通过它退出HandlerThread.getLooper().quit()吗?这可能意味着HandlerThread即使在我的所有应用程序组件都被销毁之后,它仍将继续存在于等待状态.
最初这对我来说似乎是一个很大的问题 - 我绝对不想做的事 - 但我现在不确定.当Android杀死我的进程时,就像它需要释放CPU时间或内存一样,它将结束这个线程和我的UI线程.此外,线程将等待,因此它不会占用任何CPU时间.除此之外,我的应用程序使用了很多AsyncTasks,我知道利用线程池.根据我的理解,AsyncTask利用ThreadPoolExecutor,它不遵循任何应用程序生命周期回调(池中的线程在不使用时,只是坐等).
所以我的问题是,我可以使用HandlerThread跨多个应用程序组件,从不(或很少)退出它,并在不使用时让它等待,而不会遭受可怕的不良影响吗?
我开始将Alembic合并到我已经使用SQLAlchemy表定义的项目中.目前我的数据库架构是在我的应用程序外部管理的,我想将整个架构带入我的表定义文件中.
在PostgreSQL中,我使用自定义域来存储电子邮件地址.PostgreSQL DDL是:
CREATE DOMAIN email_address TEXT CHECK (value ~ '.+@.+')
Run Code Online (Sandbox Code Playgroud)
如何在SQLAlchemy中表示此域的创建及其作为列数据类型的用法?
我遇到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修改,但这似乎不合适).
我意识到这是一个非常开放的帖子,但我对此有点失落,并会对我写的内容有所评论.
我正在用Python构建一个Web应用程序(使用Flask).我不打算使用SQLAlchemy或类似的ORM系统,而是直接使用Psycopg2.
我应该为每个新请求打开一个新的数据库连接(并随后关闭它)吗?或者我应该使用什么来汇集这些连接?
我有一个词典列表.我想首先对该列表进行排序,然后只迭代这些项的子集.
这是我试过的:
{% 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()过滤器,则切片有效.但我想一起使用两者.
大多数Android框架组件都不是线程安全的 - 至少这是我通常使用的假设.
但是,startService()从后台线程调用是否安全?
我发现了Dianne Hackborn的帖子,他说sendBroadcast()从任何线程打电话都是安全的,所以我想假设这也是如此startService()(http://groups.google.com/group/android-developers/msg/ 38a09b52de93f70a).
有框架的人可以评论吗?
谢谢!
这是我想要生成的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) 我正在使用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) 我试图理解PostgreSQL generate_subscripts函数的第二个参数.该文档指出的第二个参数是在其下标应生成所述阵列的尺寸:
generate_subscripts是一个便捷函数,它为给定数组的指定维生成一组有效的下标.
但是,对于我的二维示例数组,提供参数1或2两者都会生成相同的输出.
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.
几天前我用2.2(Froyo)升级了我的Nexus One.今天早上当我去使用它时,我看到一个Dialog坐在家庭/启动器屏幕的顶部,通知我有更新可用,我现在或以后可以选择升级.
我的问题是,这个用于在主屏幕上显示Dialog(可能是AlertDialog)的API机制是什么?编写了一个Android应用程序后,我的理解是Dialogs只能显示在一个Activity上,并且一个服务无法显示一个Dialog(只有一个Toast).
谷歌是否可能将活动看起来像对话框?是否有新的API方法可用于显示Dialog而无需Activity?
我正在使用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) android ×5
python ×4
postgresql ×3
flask ×2
sqlalchemy ×2
alembic ×1
arrays ×1
handler ×1
httpclient ×1
java ×1
jinja2 ×1
layout ×1
orm ×1
psycopg2 ×1
sql ×1
sql-domain ×1
themes ×1