标签: lifecycle

在哪里可以找到.NET中开发的Windows服务生命周期的详细视图?

在哪里可以找到.NET中开发的Windows服务生命周期的详细视图?我以这种方式提出问题,因为我不确定在这里可以发布详细的描述,但如果您认为可以请随意尝试.

不正确答案的一个示例是从MSDN页面粘贴说明:Windows服务应用程序简介.它不够详细.例如,服务是否已从内存中卸载,因此调用了Dispose方法?或者只是通过OnStop方法停止,只是通过调用OnStart方法重新启动而不进行初始化?


由于我的问题已被回答,同时提出另一个问题,这里有一些对象生命周期的引用(我现在知道它也适用于服务)供未来访问者使用这个问题:

StackOverflow - 什么是.NET对象生命周期?

tutorials.beginners.co.uk/read/id/188

developerfusion.com/article/1047/new-objectoriented-capabilities-in-vbnet/3/

请享用!

.net windows service lifecycle lifetime

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

如何跟踪在CRUD场景中从ObservableCollection中删除的对象?

在我们的多层业务应用程序中,我们拥有ObservableCollections从服务调用返回的自我跟踪实体.

我们的想法是希望能够从集合客户端获取实体,添加,更新和删除它们,然后将这些更改发送到服务器端,并将它们保存到数据库中.

自我跟踪实体,正如其名称所暗示的那样,可以自己跟踪其状态.当创建一个新的STE时,它具有Added状态,当你修改一个属性时,它设置Modified状态,它也可以有Deleted状态,但是当从一个ObservableCollection(显然)中删除实体时,不会设置这个状态.如果您想要这种行为,您需要自己编写代码.

在我当前的实现中,当从中删除实体时ObservableCollection,我将其保存在阴影集合中,这样当ObservableCollection发送回服务器时,我可以发送已删除的项目,因此实体框架知道删除它们.

有点像:

protected IDictionary<int, IList> DeletedCollections = new Dictionary<int, IList>();

protected void SubscribeDeletionHandler<TEntity>(ObservableCollection<TEntity> collection)
{
    var deletedEntities = new List<TEntity>();
    DeletedCollections[collection.GetHashCode()] = deletedEntities;

    collection.CollectionChanged += (o, a) =>
        {
            if (a.OldItems != null)
            {
                deletedEntities.AddRange(a.OldItems.Cast<TEntity>());
            }
        };
}
Run Code Online (Sandbox Code Playgroud)

现在,如果用户决定将更改保存到服务器,我可以获取已删除项目的列表,并将其发送到:

ObservableCollection<Customer> customers = MyServiceProxy.GetCustomers();

customers.RemoveAt(0);

MyServiceProxy.UpdateCustomers(customers);
Run Code Online (Sandbox Code Playgroud)

此时,UpdateCustomers如果删除了任何项目,该方法将验证我的阴影收集,并将它们发送到服务器端.

这种方法很好,直到你开始考虑这些影子集合的生命周期.基本上,当ObservableCollection收集垃圾时,无法知道我们需要从字典中删除阴影集合.

我提出了一些复杂的解决方案,基本上在这种情况下进行手动内存管理.我保持WeakReferenceObservableCollection,并每隔几秒钟我检查,看看是否引用是无效的,在这种情况下,我删除了阴影集合.

但这似乎是一个可怕的解决方案......我希望StackOverflow的集体天才可以为更好的解决方案提供帮助.

编辑:

最后我决定继承子类化ObservableCollection.生成服务代理代码,因此更改它以返回我的派生类型是一个相对简单的任务.

感谢您的帮助!

lifecycle entity-framework observablecollection self-tracking-entities

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

Android上基于枚举的单例的生命周期

几天前,我发现单身人士可以在Android中成为反模式.我的单例(具有私有构造函数的类和存储在静态字段中的实例)被删除(尽管其他活动仍在使用此单例(通过getInstance()方法),因此实例被删除,因此必须创建另一个实例)因为Activity从中第一次调用被删除(在仅为此一项活动调用完成后).

我已经读过这个问题是如何解决的,但是我也读过"Effective Java".据说"单元素枚举类型是实现单例的麻烦方式".

所以现在我想知道在Android应用程序中以这种方式创建的单例的生命周期是什么?它是否与"标准单例实现"的情况相同,因此在破坏第一次被销毁时调用它的活动(即使它也用于其他活动)?

我不是要问关于正确的android单例实现还是单例模式本身(是模式还是反模式等),但是我想知道这个枚举单例对象的生命周期是什么以及什么时候它会被销毁.

lifecycle singleton enums android

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

为什么在以下情况下不会调用"onPause"?

通过该文档,在以下情况下调用"onPause":

当系统即将开始恢复先前的活动时.

与"onStop"相比,不同之处在于:

当活动不再对用户可见时调用,因为另一个活动已恢复并且正在覆盖此活动.

但是,当我长按HW-Home键并显示"最近的应用程序"时,不会调用"onPause".

此时,我无法与原始活动进行交互,但仍然可见.

我很困惑这种情况.请帮忙解释一下.

非常感谢你.BR,亨利

lifecycle android timing onpause android-activity

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

有没有办法知道在类助手中是否正在创建或销毁对象?

我有很少的类助手用于创建子组件,如弹出菜单,以便在运行时访问这些子组件,我创建了一个Singleton TDictionary.

我的问题是如何知道所有者组件被销毁以从TDictionary中删除子组件?

如果它是一个专门的组件,我将它添加到析构函数中,但我不能在类助手中添加构造函数和/或析构函数.

编辑 - 解决方案

我创建了一个接受TObject作为参数的基础对象,使用时,必须手动完成删除操作.

然后我从它继承了一个新类,重写方法只接受TComponent.这就是现在代码的相关部分:

type     
  TCustomLinkedComponents = class(TCustomLinkedObjects)
  strict private
    type
      TCollector = class(TComponent)
      protected
        procedure Notification(AComponent: TComponent; Operation: TOperation); override;
      end;
  strict private
    FCollector: TCollector;
[..]
  end;

procedure TCustomLinkedComponents.Add(Owner: TComponent; const LinkedName: string; LinkedComponent: TComponent);
begin
  inherited Add(Owner, LinkedName, LinkedComponent);
  FCollector.FreeNotification(LinkedComponent);
end;

procedure TCustomLinkedComponents.TCollector.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if Operation = opRemove then
    LinkedObjects.Remove(TObject(AComponent));
end;
Run Code Online (Sandbox Code Playgroud)

使用这种方法,我可以解决我的实际需要,并打开后可以轻松扩展.

delphi lifecycle class-helpers

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

活动生命周期的可靠性(onPause到onDestory)

经过多年信任生命周期,我做了一点挖掘.现在我不觉得好笑.

我知道并阅读了很多关于onStop不能保证被称为等的内容.

我创建了一个带有2个Activites和一个自定义Application类的简单应用程序.我在每个回调中放了一个Log.d(),我可以在一个带有4.1的Galaxy S2上找到并玩.活动A在启动时启动,并在onResume启动时启动活动B.活动B有一个创建Nullpointer的按钮,但是它什么都不做.

现在担心/混淆我的事情:

  • 如果我在buttonclick上创建一个nullpointer,应用程序崩溃并且两个活动都没有回调

  • 如果我按下电源按钮并关闭屏幕,如果活动的显示模式(纵向或横向)与设备的原始方向不匹配,活动将重新启动.我知道这和我如何覆盖它,但如果它破坏并重新启动我的活动它调用onPauseisFinishing()返回false但活动正在完成并重新启动.

  • 如果上面没有发生,onPause即使应用程序不再可见,也只会被调用

  • onPause在A中启动另一个活动调用,然后创建B onResume然后调用onStopA.现在我在.App类中跟踪我的活动,如果我取消注册A onPause并注册B in onResume,将会有一个分裂毫秒没有注册任何活动.如果我想在没有任何活动时关闭某些服务,它会一直发生.但是如果我取消注册它onStop(因此它们会重叠),当用户点击电源按钮并且服务(或线程或其他)继续运行并耗尽电池电量时,它将永远不会被注销.

我正在使用android已经有一段时间了,我正试图实现一个相当复杂或让我们说防弹设计.但几乎不可能跟踪我的活动发生了什么.

  • 必须通过Intent.ACTION_SCREEN_OFF检测断电,但是当它已经关闭时会发生.之前唯一的事就是onPause.

  • homebutton ... onUserInteraction和pause/stop的某种组合

很难简单地确定我的APP(不仅仅是一个活动)何时不再被使用并放入后台以及何时只是在活动之间转换或何时被系统关闭.因为.App类没有回调终止,因为onTerminate()只在模拟器中使用,所以文档说.

也许我只是没有看到森林穿过树林...帮助将不胜感激!

lifecycle android

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

Swift iOS应用程序从何处开始?

如果我在Xcode中创建一个Objective-C iOS应用程序,main.m则会生成一个名为的文件.该文件的内容如下所示:

的main.m

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是Objective-C iOS应用程序开始其生命的地方.

重要的是,如果我想要子类UIApplication(无论出于何种原因),那么我可以在这里告诉我的应用程序将哪个类用于应用程序类.同样,如果由于某种原因我想使用除AppDelegate我的应用之外的类名,我会在这里更改这些信息.

但是,如果我在Xcode中创建一个Swift iOS应用程序,则不会生成这样的文件(我已经能够找到).我在哪里设置这些东西?

lifecycle program-entry-point ios swift

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

用ajax调用React组件 - 生命周期

所以我有一个有趣的案例,即使用与Ajax调用的反应.

把它放在上下文中,我有一个带有3个标签的手风琴.初始化Accordion react组件后,我首先打开第一个标签,其余标签关闭.每个标签都有它的主体所谓的DictionaryCall组件,如下所示:

return class DictionaryCall extends React.Component {

        constructor (props) {
            super();
            this.state = {
                word: '',
                data: [],
                error: false,
                nodata: false,
                initialLoaded: props.load
            }
        }

        componentDidMount () {
            if(this.state.initialLoaded){
                this.callAjax();
            }
        }

        componentWillReceiveProps (nextProps) {
            if(nextProps.load){
                this.setState({initialLoaded: true});
                this.callAjax();
            }
        }

        callAjax () {
            $.ajax({
                url: this.props.url,
                dataType: 'json',
                catche: false,
                method: 'POST',
                data: {word: this.props.word},
                success: function(data){
                    if(!data.length){
                        this.setState({nodata: true});
                    } else {
                        this.setState({data: data});
                    }
                }.bind(this),
                error: function(xhr, status, error){
                    console.log(this.props.url, status, error.toString());
                    this.setState({error: true}); …
Run Code Online (Sandbox Code Playgroud)

javascript ajax lifecycle reactjs

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

如何防止React Native中的多个警报?

有没有办法在发送另一个之前判断屏幕上是否已经有Alert.alert()?

我有这个功能:

CheckInternet(){
  if(this.props.json.undefined){
    Alert.alert("Check your internet connection");
  }
}

ComponentDidUpdate(){
  this.CheckInternet();
}
Run Code Online (Sandbox Code Playgroud)

问题是我在该函数内部还有其他事情,我只是写了相关的代码,所以我不能把这个CheckInternet函数带到外面ComponentDidUpdate.

问题是组件在获取后会更新两次json,因此会发送两次警报.我想通过一个条件来防止同时发出两个警报,这个条件会让我知道屏幕上是否有警报.我似乎没有在Alert文档中找到类似的东西.有任何想法吗?

javascript lifecycle alerts react-native

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

屏幕出现时调用哪个生命周期事件?

假设我有两个屏幕:

  • 屏幕A.
  • 屏幕B.

我最初登陆了Screen A.当我点击一个Button导航到Screen B.当我按下时Back Button,我再次导航到Screen A.

当我导航到Screen A上面的场景中时,我想调用一个动作创建者.

我只是想知道每次呈现屏幕时都会调用哪个生命周期事件.

是不是有一些事件componentWillAppear()

注:我使用react-nativereact-navigation用于导航.

javascript lifecycle react-native react-navigation

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