如何在删除密钥时从LinkedHashMap对象中删除侦听器

时间:2016-05-23 13:45:41

标签: java android garbage-collection linkedhashmap listeners

我有private static Boolean IsLegacyPathToPost(this HttpContext context) { return context.IsLegacyPath() && context.Request.Path.Value.Contains("/archives/"); } public static void HandleLegacyRoutingMiddleware(this IApplicationBuilder builder) { builder.MapWhen(context => context.IsLegacyPathToPost(), RedirectFromPost); } private static void RedirectFromPost(IApplicationBuilder builder) { builder.Run(async context => { await Task.Run(() => { //urlHelper is instanciated but it's ActionContext is null IUrlHelper urlHelper = context.RequestServices.GetService(typeof(IUrlHelper)) as IUrlHelper; IBlogContext blogContext = context.RequestServices.GetService(typeof(IBlogContext)) as IBlogContext; //Extract key var sections = context.Request.Path.Value.Split('/').ToList(); var archives = sections.IndexOf("archives"); var postEscapedTitle = sections[archives + 1]; //Query categoryCode from postEscapedTitle var query = new GetPostsQuery(blogContext).ByEscapedTitle(postEscapedTitle).WithCategory().Build(); var categoryCode = query.Single().Categories.First().Code; //Redirect context.Response.Redirect(urlHelper.Action("Index", "Posts", new { postEscapedTitle = postEscapedTitle, categoryCode = categoryCode }), true); }); }); } 这样:

LinkedHashMap

添加一个private LinkedHashMap<String, Column> columns = new LinkedHashMap<>();

Column

columns.put(name, column); 具有侦听器的对象

当我删除列时:

Column

听众仍然有效

我尝试了columns.remove(name); ,确实有所帮助,听众不再活跃

WeakHashMap 不会保留广告订单。

我还尝试让WeakHashMap将其设置为null,然后从地图中删除密钥但没有运气。听众仍然活跃。

对此有何建议?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您需要从列中删除它们而不是HashMap

答案 1 :(得分:0)

onStart移除时,我最终实施了onDestroyLinkedHashMap生命周期事件。

受Android开发,活动和服务的影响