我有一个使用SQL数据库的应用程序.这是由SQLiteOpenHelper类封装的.启动启动画面时,它会在DataProvider类上调用init,该类存储SQLiteOpenHelper的受保护静态实例.init只是调用SQLiteOpenHelper的构造函数:
public class UKMPGData extends SQLiteOpenHelper
{
public UKMPGData(Context context, String databaseName)
{
super(context, databaseName, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
//create table and set up triggers etc
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
onCreate(db);
}
}
public class UKMPGDataProvider
{
protected static UKMPGData uKMpgData;
public static void init(Context aApplicationContext, String aDatabaseName)
{
uKMpgData = new UKMPGData(applicationContext, databaseName);
}
public static void close()
{
uKMpgData.close();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我又有两个扩展UKMPGDataProvider的类,因此可以访问uKMpgData.这些类从数据库中检索和存储特定类型的数据.例如.
public class VehicleDataProvider extends …Run Code Online (Sandbox Code Playgroud) 我在DB中有双重插入的奇怪错误.我有以下课程:
我把问题放在junit测试中(我使用的是嵌入式Glassfish):
@Test
public void test() throws NamingException {
Dataset<TestEntity> dataset = this.lookupBy(DatasetBean.class);
Assert.assertNotNull(dataset);
TestEntity t = new TestEntity();
t.setName(UUID.randomUUID().toString());
dataset.insert(t);
System.out.println("end");
}
Run Code Online (Sandbox Code Playgroud)
测试流程如下:
在获取数据集对象后,我尝试插入TestEntity对象
@Stateless @EJB(name ="...",beanInterface = Dataset.class)公共类DatasetBean实现Dataset {
@PersistenceContext(type = PersistenceContextType.TRANSACTION)
private EntityManager entityManager;
@Override
public void insert(T entidade) {
LOG.info("Inserting: " + entidade);
entityManager.persist(entidade);
}
//...
Run Code Online (Sandbox Code Playgroud)
}
使用DatasetFactory,我尝试在TestEntity的@PostPersist方法中插入审计实体
公共类DatasetFactory {公共静态数据集createDataset(){尝试{回报率(数据集)新的InitialContext()查询( "...").} catch(Exception ex){throw new RuntimeException(ex); }}}
@Entity公共类TestEntity实现MyEntity {@Id private Integer id; …
我正在创建一个聊天应用程序,我想知道我是否应该使用服务以及它将如何影响我的应用程序的生命周期.据我所知,如果内存不足,Android操作系统可能会破坏我的应用程序.我的问题:如果Android销毁它们或者我是否需要STICKY服务,那么仅使用活动和接收器的应用程序会重新启动吗?我用两者都创建了应用程序,所以我有点想法,但我只是想确定一下.
其次,http://developer.android.com/reference/android/app/Service.html说:
请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行.这意味着,如果您的服务要进行任何CPU密集型(例如MP3播放)或阻止(例如网络)操作,它应该生成自己的线程来执行该工作.
我的应用程序有一个长时间运行的线程(AsyncTask),它从服务器读取(并不断阻塞).最好不要使用服务并使用AsyncTask来保持我的应用程序原样吗?如果Android选择关闭我的应用,这将如何影响应用的生命周期?如果没有必要,我是否应该提供长期服务,这是不错的做法,如果我应该制作一个STICKY服务呢?我注意到很多聊天和txt msg应用都使用了粘性服务.我只是想想我的应用程序是否需要一个.
再次感谢您!
有许多地方可以在ASP.NET中执行初始化代码:
PreApplicationStartMethodPostApplicationStartMethodApplication_Start这些事件的排序是什么?是否还有其他附加项目应该列入此列表?
编辑:由于有人提到静态与第一个调用位置相关,我将为它们打破这个问题
WebActivator中使用的Foo类 PreApplicationStartMethod
WebActivator中使用的Bar类 PostApplicationStartMethod
在Global.asax中使用的Baz类 Application_Start
为清楚起见,假设在上面的例子中,每个例子都依赖于在该位置使用的Foo/Bar/Baz类,并且该类包含静态构造函数和静态只读字段.
所有:
如果我定义一个组件有一个名为"value"的属性,
var Child = React.createClass({
componentWillReceiveProps: function(){
console.log("componentWillReceiveProps",this.props.value);
},
shouldComponentUpdate : function(){
console.log("shouldComponentUpdate", this.props.value);
return true;
},
componentWillUpdate : function(){
console.log("componentWillUpdate", this.props.value);
},
componentDidUpdate: function(){
console.log("componentDidUpdate", this.props.value);
},
render: function(){
return (
<div>The value generated by Parent: {this.props.value}</div>
);
}
});
Run Code Online (Sandbox Code Playgroud)
如果我想将新设置的props.value赋予state.value(或者可能为转换/插值准备一个值),但渲染之前的所有阶段只有前一个值.谁能告诉我如何在渲染之前获得新值?
谢谢
过去5个小时我正试图修复这个bug.我有两个VC.在第一个VC中有一个触发segue的轻击手势.
@IBAction func addMaterial(sender: AnyObject){
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("addNewMaterialSegue", sender: self)
}
}
Run Code Online (Sandbox Code Playgroud)
第二个VC:
override func viewDidLoad() {
dispatch_async(dispatch_get_main_queue()) {
super.viewDidLoad()
print("viewDidLoad")
}
}
override func viewWillAppear(animated: Bool) {
print("viewWillAppear")
super.viewWillAppear(animated)
}
Run Code Online (Sandbox Code Playgroud)
从viewDidLoad到viewWillAppear需要大约5个秒.我知道我不是第一个提出这个问题的人,但我没有找到与"创建和呈现视图控制器应该在主线程上完成"不同的解决方案,而不是我的情况.
我一直在研究 Android 中新架构组件中引入的 Room DB,并考虑将我当前的 DB 迁移到 Room DB。
但是我当前的 db 实现允许我向表中添加列,但根据 Room,POJO 类中的字段表示表的列。
可以使用原始查询在 Room DB 中添加列,如果是,我将如何实现它。
你能否告诉我Aurelia中的组件和View之间有什么区别?他们的架构是什么?他们的生命周期有什么区别?
我有一个页面中的组件,我需要在每次导航到页面时挂钩.它包含一个mapbox地图,我发现它没有正确调整大小如果用户注册使用注册页面并拉起键盘然后返回到地图页面地图div较小,因为用户拉开了他们的键盘电话.我希望这是有道理的?
我已经尝试了这里列出的所有钩子https://angular.io/guide/lifecycle-hooks,但每次导航到页面时都不会触发.
任何帮助都会很棒.
我有一个包含复杂输入(一些图表数据)的子组件.在获得API响应后,我通过Angular 5中的@Input()装饰器从父组件发送此图表数据.因此,每次在父组件上更改时,我都需要根据API响应同步图表,因此,OnChange Lifecyle.但不幸的是,我无法使其正常工作.我尝试设置一个具有基本数字类型的虚拟输入字段并增加它但是徒劳无功.这是我的实现:
儿童图表组件:
export class ChartComponent implements OnInit, OnChanges {
@Input() chartData;
@Input() triggerChart;
ngOnChanges(changes: SimpleChanges) {
console.log(changes);
}
}
Run Code Online (Sandbox Code Playgroud)
父组件html:
<app-chart [chartData]="chartData" [triggerChart]="triggerChartData"></app-chart>
<input [(ngModel)]="triggerChartData" type="hidden">
Run Code Online (Sandbox Code Playgroud)
父组件:
this.chartService.getChartData(params).subscribe(res => {
this.chartData = res;
this.triggerChartData++;
});
Run Code Online (Sandbox Code Playgroud)
PS:作为标题的ngOnChanges仅指示在组件使用未定义值初始化时触发一次.